1. 程式人生 > >Thread 創建的三種方式

Thread 創建的三種方式

nbsp 三種 實現類 col package stub net one 獲得

轉載自 https://blog.csdn.net/hellorichen/article/details/53127719

Java中創建線程主要有三種方式:

一、繼承Thread類創建線程類

①定義Thread類的子類,並重寫run方法。

②創建Thread子類的實例。

③調用start()方法。

訪問當前線程:Thread.currentThread().

二、通過Runnable接口創建線程類

同上,只是改為定義runnable接口的實現類。

啟動 new Thread(Runnable r,String name).start();

例:

1 new Thread(new Run(),"r1").start();

Run為Runnable接口的實現類。或者寫為:

 1 package thread;
 2  
 3 public class Main {
 4     public static void main(String[] args) {
 5         new Thread(new Runnable(){
 6             @Override
 7             public void run() {
 8                 System.out.println("run()");
 9             }},"r1").start();
10 } 11 }

接口不可實例化,所以參數必須為實現接口的類或匿名類。

三、通過Callable和FutureTask創建線程

①創建Callable接口的實現類,並實現call()方法,該call()方法將作為線程執行體,並且有返回值。

 1 package thread;
 2  
 3 import java.util.concurrent.Callable;
 4  
 5 public class MyCallable implements Callable<Integer>{
 6     @Override
 7     public Integer call() throws
Exception { 8 // TODO Auto-generated method stub 9 return 1111; 10 } 11 12 }

②創建Callable實現類的實例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。

③使用FutureTask對象作為Thread對象的target創建並啟動新線程,FutureTask是Runnable的子類

④調用FutureTask對象的get()方法來獲得子線程執行結束後的返回值

 1 package thread;
 2  
 3 import java.util.concurrent.ExecutionException;
 4 import java.util.concurrent.FutureTask;
 5  
 6 public class Main{
 7     public static void main(String[] args) {
 8         FutureTask<Integer> ft = new FutureTask<>(new MyCallable());
 9         new Thread(ft).start();
10         try {
11             System.out.println(ft.get());
12         } catch (InterruptedException e) {
13             // TODO Auto-generated catch block
14             e.printStackTrace();
15         } catch (ExecutionException e) {
16             // TODO Auto-generated catch block
17             e.printStackTrace();
18         }
19     }
20 }

使用接口實現線程的好處:

多個線程可共享一個target對象,所以非常適合多個相同線程來處理同一份資源的情況,從而將CPU、代碼和數據分開,形成清晰的模型,較好地體現了面向對象的思想。

Thread 創建的三種方式