今天在寫部落格的時候,想弄個例子說明一下非原子操作的執行緒安全問題,下面就是這個例子
public class main ;
}.start();
}system.out.println(counter.getcount());
}class counter
public int getcount()
}然後執行的結果是「意料之中」的,因為count++並不是原子操作,會有執行緒安全問題,所以輸出的結果是小於1000的,然後我說用synchronized關鍵字來解決這個問題,就是在counter的inc()方法上加上這個關鍵字,然後一執行就傻眼了,怎麼輸出結果還是小於1000,執行了多次都是這樣,幾乎要接近崩潰
然後思考了許久,才想起來,這特麼的啟動的1000個執行緒可能還沒結束主線程就執行輸出**了呀!!!對對對,就是這個問題,然後我讓主線程睡眠1秒(權宜之計),然後就輸出了我夢寐以求的1000
public class main ;
}.start();
}try catch (interruptedexception e)
system.out.println(counter.getcount());}}
這個故事告訴我們,對待執行緒要小心翼翼,不然一不下心就踏進無窮無盡的套路中不可自拔,希望同學們不要犯我這個錯誤,很多時候錯誤就發生在不經意的小細節!
按順序執行執行緒
condition介面提供了類似object的監視器方法,與lock配合可以實現等待 通知模式。condition定義了等待 通知兩種型別的方法,當前執行緒呼叫這些方法時,需要提前獲取到condition物件關聯的鎖。condition物件是由lock物件 呼叫lock物件的newcondition...
執行緒的執行順序
執行緒的執行完全是自發的去搶cpu時間片,誰先搶到誰就先去執行 package com.pers.xiancheng public class test implements runnable 裡面的 if thread.currentthread getname equals a thread.c...
java多執行緒執行順序
我們建立兩個執行緒,讓奇數執行緒輸出奇數,偶數執行緒執行輸出偶數。先來看看 實現 package test import org.ietf.jgss.oid public class threadnum extends thread public void run system.out.printl...