日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多线程学习(五)

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程学习(五) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

join

一個線程上調用另一個線程,其效果是等待一段時間直到第二個線程結束才繼續執行.也可以在join()加一個超時的參數,這樣在這段時間到期還沒有結束的話,join總能返回。
如果在一個線程中調用t.join(),那么此線程將被掛起直到t運行結束才恢復:

public class Sleeper extends Thread {private int duration;public Sleeper(String threadName, int duration) {super(threadName);this.duration = duration;start();}@Overridepublic void run() {try {sleep(duration);} catch (InterruptedException e) {// TODO Auto-generated catch block // e.printStackTrace();System.out.println("sleeper:"+getName()+" is interrupted");return;}System.out.println("sleeper:"+getName()+" has awakened");}} public class Jioner extends Thread {private Sleeper sleeper;public Jioner(Sleeper sleeper, String threadName) {super(threadName);this.sleeper = sleeper;start();}@Overridepublic void run() {// TODO Auto-generated method stubtry {sleeper.join();} catch (InterruptedException e) {// TODO Auto-generated catch block// e.printStackTrace();System.out.println("joiner:" + getName() + " is interrupted");}System.out.println("joiner:" + getName() + " completed");}public static void main(String[] args) {Sleeper s1 = new Sleeper("s1", 15000), s2 = new Sleeper("s2", 15000);Jioner j1 = new Jioner(s1, "j1"), j2 = new Jioner(s2, "j2");s1.interrupt();} }

輸出:
sleeper:s1 is interrupted
joiner:j1 completed
sleeper:s2 has awakened
joiner:j2 completed
可以看出joiner沒有自己直接運行結束而是等待sleeper線程運行完成之后才繼續運行至結束。

題外話:這個join的具體用處可以在 A、B、C三個線程必須按照abc這樣的順序執行的時候運用。(C.join B 、 B.join A) 這也是一個經典的java多線程面試題目:如何讓abc三個線程按照順序執行?答案可能有很多,最簡單的是用join來實現。我在阿里一面的時候被問到了,我當時答得是什么破玩意。 現在才知道答案還不算太晚。

線程組

這個不推薦使用:
think in java 中:

轉載于:https://www.cnblogs.com/joeCqupt/p/6816754.html

總結

以上是生活随笔為你收集整理的多线程学习(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。