三個執行緒交替順序列印ABC

2021-10-03 08:06:41 字數 636 閱讀 8946

建立三個執行緒a、b、c,a執行緒列印10次字母a,b執行緒列印10次字母b,c執行緒列印10次字母c,但是要求三個執行緒同時執行,並且實現交替列印,即按照abcabcabc的順序列印。

解決辦法:使用synchronized, wait和notifyall

思路:使用同步塊和wait、notify的方法控制三個執行緒的執行次序。具體方法如下:從大的方向上來講,該問題為三線程間的同步喚醒操作,主要的目的就是threada->threadb->threadc->threada迴圈執行三個執行緒。為了控制線程執行的順序,那麼就必須要確定喚醒、等待的順序,所以每乙個執行緒必須同時持有兩個物件鎖,才能進行列印操作。乙個物件鎖是prev,就是前乙個執行緒所對應的物件鎖,其主要作用是保證當前執行緒一定是在前乙個執行緒操作完成後(即前乙個執行緒釋放了其對應的物件鎖)才開始執行。還有乙個鎖就是自身物件鎖。主要的思想就是,為了控制執行的順序,必須要先持有prev鎖(也就前乙個執行緒要釋放其自身物件鎖),然後當前執行緒再申請自己物件鎖,兩者兼備時列印。之後首先呼叫self.notify()喚醒下乙個等待執行緒(注意notify不會立即釋放物件鎖,只有等到同步塊**執行完畢後才會釋放),再呼叫prev.wait()立即釋放prev物件鎖,當前執行緒進入休眠,等待其他執行緒的notify操作再次喚醒。

三個執行緒ABC,交替列印ABC

問題為三線程間的同步喚醒操作,主要的目的就是threada threadb threadc threada 迴圈執行三個執行緒。為了控制線程執行的順序,那麼就必須要確定喚醒 等待的順序,所以每乙個執行緒必須同時持有兩個物件鎖,才能繼續執行。乙個物件鎖是prev,就是前乙個執行緒所持有的物件鎖。還有乙...

學習 多執行緒順序列印ABC

深夜睡不著,更新一波,突然想起了兩個月之前的一次面試的懊悔。為什麼懊悔呢,因為面試官出的題很簡單很簡單,但是我想太多了,導致出糗了。題目,有三個執行緒,按順序列印123。public class test1 extends thread thread b newthread new runnable...

三個執行緒交替列印ABC 最優演算法

看了很多關於執行緒交替列印abc的,千奇百怪,有用鎖的,也有用原子操作的,還有用巢狀同步 塊的,實在是很沒有必要,演算法題追求的是簡短精煉,思想昇華。演算法題就是活到老學到老啦,下面就給大家介紹乙個最好的演算法思路。仔細看哦,不難理解。1.volatile關鍵字 多執行緒操作同乙個變數的時候,首先獲...