多執行緒經典問題2 子執行緒之間交替問題

2021-07-04 13:06:08 字數 942 閱讀 3950

編寫乙個程式,開啟3個執行緒,這3個執行緒的id分別為a、b、c,每個執行緒將自己的id在螢幕上列印10遍,要求輸出結果必須按abc的順序顯示;如:abcabc….依次遞推。

具體**如下:

package treadgame;

/** * 執行緒間的交流1

* 編寫乙個程式,開啟3個執行緒,這3個執行緒的id分別為a、b、c,

* 每個執行緒將自己的id在螢幕上列印10遍,

* 要求輸出結果必須按abc的順序顯示;如:abcabc….依次遞推。

* @author lcx

* */

public class threadexchange2

}class resource2

catch (interruptedexception e)

}system.out.print(tag);

index=(index+1)%3;

notifyall();

} }}class subs implements runnable

public void run()

}

必須要注意的是

while(tag-'a'!=index)
不能寫成
if(tag-'a'!=index)
否則會出現錯誤,因為notifyall會喚醒剩下的兩個執行緒,其中只能有乙個是正確的、需要執行的執行緒

追問:之前說的子執行緒與主線程交替執行,為什麼就可以在使用if來判斷是否wait?
因為如果本執行緒不是需要執行的執行緒,那麼另外乙個執行緒絕對是需要執行的執行緒,所以乙個if就行。

多執行緒經典問題2 子執行緒之間交替問題

編寫乙個程式。開啟3個執行緒,這3個執行緒的id分別為a b c,每乙個執行緒將自己的id在螢幕上列印10遍,要求輸出結果必須按abc的順序顯示 如 abcabc 依次遞推。詳細 例如以下 package treadgame 執行緒間的交流1 編寫乙個程式,開啟3個執行緒,這3個執行緒的id分別為a...

多執行緒經典問題1 主線程子執行緒交替問題

提出問題 子執行緒迴圈 10 次,接著主線程迴圈 100 次,接著又回到子執行緒迴圈 10 次,接著再回到主線程又迴圈 100 次。如此迴圈50次。分析 這個實際上是非常easy的問題。即子執行緒run,主線程堵塞 子執行緒堵塞,主線程run 可以使執行緒堵塞的方法有非常多,最常見的是sleep與w...

java多執行緒問題,執行緒交替執行

兩個執行緒,乙個列印1 100的奇數,乙個列印1 100的偶數 要求 執行緒1列印5個之後,執行緒2開始列印,執行緒2列印5個之後,執行緒1再開始列印,以此迴圈。package threadtest public class test1 catch interruptedexception e 當s...