1、繼承thread實現。
2、實現runnable介面。
3、實現callable介面,用futuretask接收返回值。
總結:其實執行緒最核心的是runnable,因為thread和futuretask都繼承該介面來實現具體功能,即拓展實現。而thread實現的start0()方法,其呼叫本地方法開啟新執行緒。
看第三種:
1)其中futuretask繼承了runnable介面,所以可以當做乙個執行緒來處理,並得到返回值。
2)future.get()的方法實現由必要看一下,當執行緒未執行或未結束時,會阻塞當前執行緒,直到該執行緒執行完畢。
3)為什麼可以獲得返回值呢?看下future.run()就懂了,對runnable的run()包裝了一層,呼叫繼承callable的方法獲得返回值儲存給當前future,詳見**2。
**1(測試**):
public static void main(string args) throws filenotfoundexception, interruptedexception, executionexception
});system.out.println(future.isdone());
new mythread(future).start();
new thread(future).start();
system.out.println(future.get()); }
static class mythread extends thread
@override
public void run() catch (exception e)
} }
輸出:
false
獲取到了182
182
**2(futuretask實現方法):
public void run() catch (throwable ex)
if (ran)
set(result);
}} finally
}
執行緒通訊 3種方式
一 傳統執行緒通訊 synchronized wait notify object類的wait notify notifyall 三個方法必須由同步監視器物件來呼叫,分兩種情況 a 同步方法,該類預設例項 this 就是同步監視器,可以在同步方法中可以直接呼叫 b 同步 塊,同步監視器是synchr...
使用者態多執行緒的3種實現方式
使用者態的執行緒概念和核心態的執行緒概念不同。有三種模式,分別是 1 一對一 使用者態乙個執行緒對應核心態乙個執行緒。使用者態的執行緒併發執行,是真的併發執行。乙個執行緒阻塞,不會影響其它執行緒。缺點 a 許多系統限制核心執行緒數量,這就直接限制了使用者態的執行緒數量。b 許多系統中,核心執行緒間的...
建立執行緒的3種方式
1 定義thread類的子類,並重寫該類的run方法,該run方法的方法體就代表了執行緒要完成的任務。因此把run 方法稱為執行體。2 建立thread子類的例項,即建立了執行緒物件。3 呼叫執行緒物件的start 方法來啟動該執行緒。public class mythread extends th...