JAVA多執行緒列印ABC

2021-07-22 07:18:16 字數 1173 閱讀 9003

多執行緒中乙個很有名的例題就是多執行緒列印

abc,要求用三個執行緒,分別是列印

a,列印

b,列印

c,輪流喚醒和鎖死,最終列印出10組

abc。

/**

* created by 123 on 2016/8/30.

*/public class printabc

}//將列印a,列印b,列印c分別列為三個互斥的方法,寫在類abc中

class abc

public synchronized void printa() catch (interruptedexception e)

}if (now == 'a')

notify(); //再從等待池中喚醒乙個執行緒

}public synchronized void printb() catch (interruptedexception e)

}if (now == 'b')

notify();

}public synchronized void printc() catch (interruptedexception e)

}if (now == 'c')

notify();

}}class print1 extends thread //構造方法,將abc那個類傳進來

//三個執行緒共用那乙個類

@override

public void run()

}}class print2 extends thread

@override

public void run()

}}class print3 extends thread

@override

public void run()

}}

由於notify

的喚醒是隨機的,所以如果這裡不加

if判斷的話,可能列印完

a後喚醒了列印

c的執行緒,這樣就

wait()

完了以後就又列印了乙個

c,就亂套了,這就是多執行緒的乙個

bug。

if (now == 'a')

java 多執行緒列印ABC

方法千千中,開始看到這個,我立馬想到了cyclicbarrier,能讓abc在列印在一組,可是控制不了abc列印的順序 後來自己用了乙個最簡單的synchronize的迴圈實現了,可以感覺沒什麼成就感 package dirk.zhang public class printabc class th...

java 多執行緒列印ABC

方法千千中,開始看到這個,我立馬想到了cyclicbarrier,能讓abc在列印在一組,可是控制不了abc列印的順序 後來自己用了乙個最簡單的synchronize的迴圈實現了,可以感覺沒什麼成就感 package dirk.zhang public class printabc class th...

Java 多執行緒連續列印ABC

1.利用synchronized 思路 列印a時,必須先拿到 b,c鎖,列印完了之後,釋放a鎖,然後列印b的執行緒拿到a鎖後就可以列印b,依次迴圈。public class mythreadprinter implements runnable try catch interruptedexcept...