Java中join線程操作實(shí)例分析
本文實(shí)例講述了Java中join線程操作。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
Tread提供了讓一個(gè)線程等待另外一個(gè)線程完成的方法——join()方法。當(dāng)在某個(gè)程序執(zhí)行流中調(diào)用其他線程的join()方法時(shí),調(diào)用線程將被阻塞,直到被join()方法加入的join線程執(zhí)行完后為止。
join()方法通常由使用線程的程序調(diào)用,以將大問(wèn)題劃分成許多小問(wèn)題,每個(gè)小問(wèn)題分配一個(gè)線程。當(dāng)所有小問(wèn)題都得到處理后,再調(diào)用主線程來(lái)進(jìn)一步操作。
二 代碼
public class JoinThread extends Thread { // 提供一個(gè)有參數(shù)的構(gòu)造器,用于設(shè)置該線程的名字 public JoinThread(String name) { super(name); } // 重寫run()方法,定義線程執(zhí)行體 public void run() { for (int i = 0; i < 100 ; i++ ) { System.out.println(getName() + " " + i); } } public static void main(String[] args)throws Exception { // 啟動(dòng)子線程 new JoinThread("新線程").start(); for (int i = 0; i < 100 ; i++ ) { if (i == 20) { JoinThread jt = new JoinThread("被Join的線程"); jt.start(); // main線程調(diào)用了jt線程的join()方法,main線程 // 必須等jt執(zhí)行結(jié)束才會(huì)向下執(zhí)行 jt.join(); } System.out.println(Thread.currentThread().getName() + " " + i); } } }
三 運(yùn)行結(jié)果
main 0
main 1
main 2
main 3
main 4
main 5
main 6
新線程 0
......
新線程 11
新線程 12
新線程 13
main 7
main 8
......
main 16
main 17
新線程 14
main 18
main 19
新線程 15
新線程 16
......
新線程 31
被Join的線程 0
新線程 32
被Join的線程 1
新線程 33
被Join的線程 2
新線程 34
被Join的線程 3
新線程 35
新線程 36
新線程 37
新線程 38
新線程 39
被Join的線程 4
被Join的線程 5
......
被Join的線程 13
被Join的線程 14
新線程 40
被Join的線程 15
被Join的線程 16
被Join的線程 17
新線程 41
新線程 42
被Join的線程 18
被Join的線程 19
......
被Join的線程 38
被Join的線程 39
新線程 43
新線程 44
新線程 45
被Join的線程 40
被Join的線程 41
被Join的線程 42
被Join的線程 43
新線程 46
新線程 47
新線程 48
......
新線程 60
新線程 61
被Join的線程 44
......
被Join的線程 98
被Join的線程 99
新線程 62
新線程 63
......
新線程 98
新線程 99
main 20
main 21
main 22
main 23
四 說(shuō)明
1 程序開始是mian線程和新線程并發(fā)執(zhí)行。
2 當(dāng)i為20時(shí),main線程開始等待“被Join的線程”執(zhí)行完成,此時(shí)“被Join的線程”和“新線程”并發(fā)執(zhí)行。
3 當(dāng)“被Join的線程”執(zhí)行完成,main線程繼續(xù)運(yùn)行,此時(shí)“main”和“新線程”并發(fā)執(zhí)行。
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java進(jìn)程與線程操作技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java后臺(tái)線程操作示例【守護(hù)線程】
- Java使用Callable和Future創(chuàng)建線程操作示例
- 詳解Java多線程編程中線程的啟動(dòng)、中斷或終止操作
- Java線程的start方法回調(diào)run方法的操作技巧
- Java多線程編程中使用Condition類操作鎖的方法詳解
- Java8并行流中自定義線程池操作示例
- Java使用Thread創(chuàng)建多線程并啟動(dòng)操作示例
- java線程同步操作實(shí)例詳解
- Java線程協(xié)調(diào)運(yùn)行操作實(shí)例詳解
- Java線程操作的常見方法【線程名稱獲取、設(shè)置、線程啟動(dòng)判斷等】
相關(guān)文章
Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法
MDC(Mapped Diagnostic Contexts)映射診斷上下文,該特征是logback提供的一種方便在多線程條件下的記錄日志的功能,這篇文章主要介紹了Springboot MDC+logback實(shí)現(xiàn)日志追蹤的方法,需要的朋友可以參考下2024-04-04Spring Data JPA 如何使用QueryDsl查詢并分頁(yè)
這篇文章主要介紹了Spring Data JPA 如何使用QueryDsl查詢并分頁(yè),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11解決 java.lang.NoSuchMethodError的錯(cuò)誤
這篇文章主要介紹了解決 java.lang.NoSuchMethodError的錯(cuò)誤的相關(guān)資料,需要的朋友可以參考下2017-06-06java線程并發(fā)blockingqueue類使用示例
BlockingQueue是一種特殊的Queue,若BlockingQueue是空的,從BlockingQueue取東西的操作將會(huì)被阻斷進(jìn)入等待狀態(tài)直到BlocingkQueue進(jìn)了新貨才會(huì)被喚醒,下面是用BlockingQueue來(lái)實(shí)現(xiàn)Producer和Consumer的例子2014-01-01解決eclipse中maven引用不到已經(jīng)存在maven中jar包的問(wèn)題
這篇文章主要介紹了解決eclipse中maven引用不到已經(jīng)存在maven中jar包的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10詳解Intellij IDEA中.properties文件中文顯示亂碼問(wèn)題的解決
這篇文章主要介紹了詳解Intellij IDEA中.properties文件中文顯示亂碼問(wèn)題的解決,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11