Java多线程初学者指南(5):join方法的使用
?在上面的例子中多次使用到了Thread類(lèi)的join方法。我想大家可能已經(jīng)猜出來(lái)join方法的功能是什么了。對(duì),join方法的功能就是使異步執(zhí)行的線程變成同步執(zhí)行。也就是說(shuō),當(dāng)調(diào)用線程實(shí)例的start方法后,這個(gè)方法會(huì)立即返回,如果在調(diào)用start方法后后需要使用一個(gè)由這個(gè)線程計(jì)算得到的值,就必須使用join方法。如果不使用join方法,就不能保證當(dāng)執(zhí)行到start方法后面的某條語(yǔ)句時(shí),這個(gè)線程一定會(huì)執(zhí)行完。而使用join方法后,直到這個(gè)線程退出,程序才會(huì)往下執(zhí)行。下面的代碼演示了join的用法
1 package com.fly.join; 2 3 public class JoinThread extends Thread { 4 public static int n = 0; 5 6 static synchronized void inc() { 7 n++; 8 } 9 10 public void run() { 11 for (int i = 0; i < 10; i++) 12 try { 13 inc(); 14 sleep(3); // 為了使運(yùn)行結(jié)果更隨機(jī),延遲3毫秒 15 16 } catch (Exception e) { 17 } 18 } 19 20 public static void main(String[] args) throws Exception { 21 22 Thread threads[] = new Thread[100]; 23 for (int i = 0; i < threads.length; i++) 24 // 建立100個(gè)線程 25 threads[i] = new JoinThread(); 26 for (int i = 0; i < threads.length; i++) 27 // 運(yùn)行剛才建立的100個(gè)線程 28 threads[i].start(); 29 30 System.out.println("args.length="+args.length); 31 if (args.length > 0) 32 for (int i = 0; i < threads.length; i++) 33 // 100個(gè)線程都執(zhí)行完后繼續(xù) 34 threads[i].join(); 35 System.out.println("n=" + JoinThread.n); 36 } 37 38 }建立了100個(gè)線程,每個(gè)線程使靜態(tài)變量n增加10。如果在這100個(gè)線程都執(zhí)行完后輸出n,這個(gè)n值應(yīng)該是1000。
測(cè)試1: 上面運(yùn)行的結(jié)果為不確定值,但是一般不等于1000。 ?因?yàn)椴⒉皇撬芯€程都運(yùn)行完了,才執(zhí)行最后的打印“n=" +JoinThread.n
測(cè)試2: 將31行代碼修改為:args.length >= 0, ?則結(jié)果輸出一定為:1000. ? 即所有線程都執(zhí)行完了才執(zhí)行最后的打印“n=" +JoinThread.n
轉(zhuǎn)載于:https://www.cnblogs.com/dragonflyyi/p/3538488.html
總結(jié)
以上是生活随笔為你收集整理的Java多线程初学者指南(5):join方法的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Outlets 和Referencing
- 下一篇: Java多线程与并发控制