Java 多執行緒學習總結2

2021-08-29 19:06:35 字數 1389 閱讀 2196

併發執行最理想的狀況是讓一些「毫不相干」的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...