Java多线程初学者指南(5):join方法的使用
生活随笔
收集整理的這篇文章主要介紹了
Java多线程初学者指南(5):join方法的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?在上面的例子中多次使用到了Thread類的join方法。我想大家可能已經猜出來join方法的功能是什么了。對,join方法的功能就是使異步執行的線程變成同步執行。也就是說,當調用線程實例的start方法后,這個方法會立即返回,如果在調用start方法后后需要使用一個由這個線程計算得到的值,就必須使用join方法。如果不使用join方法,就不能保證當執行到start方法后面的某條語句時,這個線程一定會執行完。而使用join方法后,直到這個線程退出,程序才會往下執行。下面的代碼演示了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); // 為了使運行結果更隨機,延遲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個線程 25 threads[i] = new JoinThread(); 26 for (int i = 0; i < threads.length; i++) 27 // 運行剛才建立的100個線程 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個線程都執行完后繼續 34 threads[i].join(); 35 System.out.println("n=" + JoinThread.n); 36 } 37 38 }建立了100個線程,每個線程使靜態變量n增加10。如果在這100個線程都執行完后輸出n,這個n值應該是1000。
測試1: 上面運行的結果為不確定值,但是一般不等于1000。 ?因為并不是所有線程都運行完了,才執行最后的打印“n=" +JoinThread.n
測試2: 將31行代碼修改為:args.length >= 0, ?則結果輸出一定為:1000. ? 即所有線程都執行完了才執行最后的打印“n=" +JoinThread.n
轉載于:https://www.cnblogs.com/dragonflyyi/p/3538488.html
總結
以上是生活随笔為你收集整理的Java多线程初学者指南(5):join方法的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Outlets 和Referencing
- 下一篇: parameter乱码提交的问题