一道經典的執行緒併發的問題,執行緒1列印1、3、5……,執行緒2列印2、4、6……,兩個執行緒交替執行輸出1、2、3、4、5、6……
首先基本的思路就是建立兩個執行緒,兩個執行緒共享object鎖,執行緒中執行完乙個迴圈之後呼叫先呼叫notify喚醒另乙個執行緒(notify只是將執行緒2從wait狀態喚醒,還沒有釋放鎖,執行緒2此時位於lock pool鎖池),然後呼叫wait使執行緒進入等待狀態(即等待佇列waiting queue),釋放鎖,同時另乙個處於喚醒狀態的執行緒獲得鎖開始執行迴圈,如此反覆。
package thread;/*** created by wangc on 2018/3/5.
*/public class threadturn catch(exception e)}}
}}
}class thread2 extends threadcatch(exception e)}}
}}
}public void
start()
public static void
main(string args)
}
a執行緒--->0 b執行緒--->0
a執行緒--->1 b執行緒--->1
a執行緒--->2 b執行緒--->2
a執行緒--->3 b執行緒--->3
a執行緒--->4 b執行緒--->4
a執行緒--->5 b執行緒--->5
a執行緒--->6 b執行緒--->6
a執行緒--->7 b執行緒--->7
a執行緒--->8 b執行緒--->8
a執行緒--->9 b執行緒--->9
a執行緒--->10 b執行緒--->10
a執行緒--->11 b執行緒--->11
a執行緒--->12 b執行緒--->12
java兩個執行緒交替執行
一般來說執行緒鎖可以用 synchronized lock。這個題目的難點不在於同步塊,而在於怎麼樣設計這個兩個執行緒的交替實現。由於執行緒爭用cpu的隨機性,就需要a線,b執行緒執行,在b執行完一次進入等待之前喚醒a,如此往復,那麼這裡就要用上notify和wait了。author wangh.w...
實現兩個執行緒交替執行
比如執行緒1輸出0,執行緒2輸出0,執行緒1輸出1,執行緒2輸出1。既然有先後順序,優先想到和順序有關的鎖,reentrantlock的公平鎖,等待時間最長的執行緒優先獲取鎖。如下 public class alternatedemo static class task implements run...
java多執行緒問題,執行緒交替執行
兩個執行緒,乙個列印1 100的奇數,乙個列印1 100的偶數 要求 執行緒1列印5個之後,執行緒2開始列印,執行緒2列印5個之後,執行緒1再開始列印,以此迴圈。package threadtest public class test1 catch interruptedexception e 當s...