併發執行最理想的狀況是讓一些「毫不相干」的somebody
自己做自己的事情,和別人無關。但是事實讓確非如此,因為在哲學上講,世界是乙個整體,每個個體之間都存在聯絡,我們讓一些東西不相干,是我們人類為了簡化問題,而從概念上進行的分割劃分,呵呵。事實上,如果某個somebody
為多個執行緒共享,其中的某些域可能成為公共資料。多執行緒對公共資源的訪問可能不會按照你的意願。
public class somebody
//a和b不停地同時增加。
public void increase() }
//不停地檢查a和b是否相等。
public void show()
}}
a和b同時增加的執行緒:
public class increase extends thread
public void run()
}
檢查a,b是否相等的執行緒:
public class show extends thread
public void run()
}
程式入口:
public class main
}
在show方法打了斷點的除錯結果:
a= -1988840804 b=-1988840804a=?b 0
a= -14091620 b=-14091620a=?b 0
a= 384001584 b=384001584a=?b 0
a= 778866029 b=778866029a=?b 0
a= 1186839591 b=1186839591a=?b 0
a= 1751989311 b=1751989311a=?b 0
a= -1663360948 b=-1663360949a=?b 1
a= -754997646 b=-754997647a=?b 1
a= -337072596 b=-337072597a=?b 1
a= -78442815 b=-78442816a=?b 1
a= 290940999 b=290940998a=?b 1
a= 662999761 b=662999760a=?b 1
a= 954816967 b=954816967a=?b 0
a= 1388427731 b=1388427730a=?b 1
a= 1881242049 b=1881242049a=?b 0
其原因就是在a和b在increase的時候,a++完畢後,increase執行緒切換到了show執行緒,導致a!=b,所以我們需要互斥,下回說說互斥。 java多執行緒總結筆記2 執行緒池
四種執行緒池 singlethreadexecutor 池中只有乙個工作者執行緒,按照任務的提交順序序列地執行所有任務。如果執行緒因為異常結束,則會有乙個新執行緒來替代它。cachedthreadpool 新任務提交時,如果所有執行緒都在忙,就新建乙個執行緒,池中線程的數量沒有上限。乙個執行緒如果長...
Java 多執行緒學習總結3
執行緒的死鎖 如果多個執行緒操作多個物件互相請求,那麼會引起死鎖。package deadlock public class somebody public synchronized void saysomething catch interruptedexception e other.sings...
java多執行緒(2)
1.synchronized 鎖重入 執行緒請求由自己持有的物件時,如果該鎖是重入鎖,請求就會成功,否則阻塞 2.synchronized出現異常時,鎖自動釋放 3.當多個執行緒要同乙個例項時 雙重校驗鎖 public class dubblesingleton catch interruptede...