多執行緒中乙個很有名的例題就是多執行緒列印
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...