標籤:執行 new t run 取消 構造 互動 方法 throw xtend
轉自:http://www.chinaitlab.com/Java/line/942440.html
編寫多線程程式是為了實現多任務的並發執行,從而能夠更好地與使用者互動。一般有三種方法,Thread,Runnable,Callable.
Runnable和Callable的區別是,
(1)Callable規定的方法是call(),Runnable規定的方法是run()。
(2)Callable的任務執行後可傳回值,而Runnable的任務是不能傳回值得
(3)call方法可以拋出異常,run方法不可以
(4)運行Callable任務可以拿到一個Future對象,表示非同步計算的結果。它提供了檢查計算是否完成的方法,以等待計算的完成,並檢索計算的結果。通過Future對象可以瞭解任務執行情況,可取消任務的執行,還可擷取執行結果。
1、通過實現Runnable介面來建立Thread線程:
步驟1:建立實現Runnable介面的類:
class SomeRunnable implements Runnable
{
public void run()
{
//do something here
}
}
步驟2:建立一個類對象:
Runnable oneRunnable = new SomeRunnable();
步驟3:由Runnable建立一個Thread對象:
Thread oneThread = new Thread(oneRunnable);
步驟4:啟動線程:
oneThread.start();
至此,一個線程就建立完成了。
注釋:線程的執行流程很簡單,當執行代碼oneThread.start();時,就會執行oneRunnable對象中的void run();方法,
該方法執行完成後,線程就消亡了。
2、與方法1類似,通過實現Callable介面來建立Thread線程:其中,Callable介面(也只有一個方法)定義如下:
public interface Callable<V>
{
V call() throws Exception;
}
步驟1:建立實現Callable介面的類SomeCallable<Integer>(略);
步驟2:建立一個類對象:
Callable<Integer> oneCallable = new SomeCallable<Integer>();
步驟3:由Callable<Integer>建立一個FutureTask<Integer>對象:
FutureTask<Integer> oneTask = new FutureTask<Integer>(oneCallable);
注釋:FutureTask<Integer>是一個封裝器,它通過接受Callable<Integer>來建立,它同時實現了Future和Runnable介面。
步驟4:由FutureTask<Integer>建立一個Thread對象:
Thread oneThread = new Thread(oneTask);
步驟5:啟動線程:
oneThread.start();
至此,一個線程就建立完成了。
3、通過繼承Thread類來建立一個線程:
步驟1:定義一個繼承Thread類的子類:
class SomeThead extends Thraad
{
public void run()
{
//do something here
}
}
步驟2:構造子類的一個對象:
SomeThread oneThread = new SomeThread();
步驟3:啟動線程:
oneThread.start();
至此,一個線程就建立完成了
java 建立線程的三種方法Callable,Runnable,Thread比較及用法