程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java join-java多線程中的join問題

java join-java多線程中的join問題

編輯:編程綜合問答
java多線程中的join問題

各位大神,本人java小菜鳥。學習java遇到一點問題,下面的代碼中,已經使用了join方法,為什麼顯示的結果不是1000呢?請前輩指教!

 public class JoinThread extends Thread {
   public static volatile int n=0;
   public void run(){
       for(int i=0;i<10;i++,n++){
           try{
               sleep(2);
           }catch(Exception e){}
       }
   }
   public static void main(String args[])throws Exception{
       Thread[] threads=new Thread[100];
       for(int i=0;i<threads.length;i++)
           threads[i]=new JoinThread();
       for(int i=0;i<threads.length;i++)
           threads[i].start();
       for(int i=0;i<threads.length;i++)
           threads[i].join();

       System.out.println("n="+JoinThread.n);
   }
}

最佳回答:


  for(int i=0;i<threads.length;i++)
           threads[i].start();  //這裡所有線程都啟動了,run方法也沒有加鎖。會有同時多個線程同時訪問n,引起髒數據。
       for(int i=0;i<threads.length;i++)
           threads[i].join();  //這裡join只是起到等上面線程執行完了在打印n,但上面n值已經不對了,再等也沒用。

       System.out.println("n="+JoinThread.n);

            解決方法, 增加synchronized
            public synchronized void run(){
            當然,也可以把鎖粒度減小。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved