併發學習(二) 多執行緒的幾種實現方式

2021-08-20 04:10:47 字數 2746 閱讀 4125

實現runnable介面,實現run()方法

future介面+callable介面+executor介面

runnable介面被設計成執行緒設計的一種公共協議。

thread類就是一種runnable介面的實現。

當乙個實現了runnable介面的執行緒類開始執行,就會自動呼叫run()方法。

實現runnable介面,必須重寫run()方法。

建議在run()方法中存放所有的業務**,做到執行緒控制與業務流程的分離。

run()方法返回型別為void,引數為空。

run()方法不能丟擲異常。

//定義

public class myrunnableimpl implements runnable

}//使用

new thread(new myrunnableimpl()).start();

當然,這裡也可以寫lambda表示式~

runnable實現類本身並不能啟動,需要thread()類的協助。

public class test implements runnable

public static void main(string args)

}

public class test,"執行緒1").start();}}

@slf4j

public class myrunnableimpl implements runnable

public void setname(string name)

public myrunnableimpl(string name)

@override

public void run() 正在執行,預計時間{}.....",this.getname(),interval);

try catch (interruptedexception e)finally 執行結束....",this.getname());}}

public static void main(string args) }}

結果:

//定義

public class mythread extends thread

}//使用

new mythread().start();

--------或者----

thread t1 = new thread(new runnable());

t1.start();

無法丟擲異常:不能宣告式的丟擲異常,增加了某些情況下的程式開發複雜度。

無法手動取消執行緒:只能等待執行緒執行完畢或達到某種結束條件,無法直接取消執行緒任務。

一般是配合執行緒池來使用。

callable介面實現的任務必須返回乙個結果並且丟擲乙個異常。

callable介面的實現類需要重寫乙個無參的方法call()。

callable介面與runnable介面類似,都是為了實現多執行緒而設計的。

runnable介面沒有返回值,也無法丟擲異常。

callable介面是乙個泛型介面。

//定義

public class mycallableimpl implements callable

}//使用

//一般配置executor使用,executor提供執行緒池服務

executorservice executor = new ....

//一般配置future介面使用,future用於儲存返回結果

//向執行緒池提交乙個任務,並把此任務的執**況儲存在future中

futrue future = executor.submit(new mycallableimple());

//獲取返回結果

future.get();

//關閉執行緒池和任務

executor.shutdwon();

callable介面用於定義任務類,並在call()方法中定義業務**。

executor介面負責執行緒池的管理(計畫在後續章節進行學習)。

future介面負責保持在executor執行緒池中執行的callable任務的執行狀態。

callable介面實現類,通過executor.submit()向執行緒池提交任務。

future介面通過get()方法獲取執行結果(一直等待知道結果產生)。

一定要記得通過executor.shutdwon()關閉執行緒池。推薦在finally中進行這個操作。

@slf4j

public class myrunnableimpl implements callable

public static void main(string args) throws exception

//輸出結果

當然,後面會詳細介紹這個~

多執行緒 實現多執行緒的幾種方式

public class mythread extends thread mythread mythread1 newmythread mythread mythread2 newmythread mythread1.start mythread2.start public class mythre...

同步,多執行緒 ,多執行緒方式實現併發。

io請求幾乎不佔cpu的。同步請求相當於排隊買東西,乙個卡主了,其他的都結不了賬了。執行緒並不是越多越好,如果他特別多還不如同步高,所以對執行緒要有個限制,所以就出現了執行緒池,執行緒池在python3裡才有的,python2裡沒有的。建立程序的話是耗費很多資源的,建立執行緒是幾乎不耗費資源的。建立...

多執行緒的幾種實現方式

前面兩種可以歸結為一類 無返回值,原因很簡單,通過重寫run方法,run方式的返回值是void,所以沒有辦法返回結果 後面兩種可以歸結成一類 有返回值,通過callable介面,就要實現call方法,這個方法的返回值是object,所以返回的結果可以放在object物件中 方式1 繼承thread類...