從三個執行緒 排隊列印 , 到 多個執行緒列印

2022-05-31 11:24:11 字數 1091 閱讀 5246

第一中 大暴力

直接 while 迴圈 判斷mark

private static class two implements runnable 

@override

public void run() }}

static void start()

for(int i = 0 ; i < n ; i++)

}}

第二種 利用 reentrantlock 的 同步

private static class three implements runnable 

}int idx;

condition pre;

condition next;

public three(int idx)

@override

public void run()

} catch (exception e) finally

}static void start()

for(int i = 0 ; i < n ; i++)

lock.lock();

try finally

}}

第三種 利用 sychronized  和 reentrantlock 同理

private static class one implements runnable 

@override

public void run() catch (interruptedexception e)

system.out.println(name);

synchronized (next) }}

}static void start()

for(int i = 0 ; i < n; i++)

for(int i = 0 ; i < n ; i++)

// 由於用的 現成的 monitor 所以千萬不要呼叫現成的 一些 synchronized 方法,最好 自定義 一些object,這裡圖省事了

synchronized (threads[n-1])

}}

三個執行緒,依次列印

程式設計實現三個執行緒abc,並讓它們順次列印abc 思路 設定三個訊號量 s1,s2,s3,s2由s1 post,s3由s2 post,s1由s3 post,由a執行緒先開始列印,其他執行緒必然在等待訊號量,所以三個執行緒一定會按照訊號量的順序來列印。注意vs 2015中多執行緒使用要呼叫wind...

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

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

建立三個執行緒,分別列印 a,b,c

建立三個執行緒,分別列印 a,b,c.現在要求用訊號量對執行緒進行同步,無論程式執行 多少次 如何執行,都能使整個程式依次列印 a b c a b c a b c 一直死迴圈 include include include include include include include includ...