經典執行緒處理列印ABC問題分析

2021-06-22 20:03:48 字數 728 閱讀 2597

package com;

public class mythreadprinter2 implements runnable

private mythreadprinter2(string name, object prev, object self)

@override

public void run()

try catch (interruptedexception e) }

}}public static void main(string args) throws exception }/*

* *

* 思路分析:

* 該問題為三個執行緒間的同步喚醒操作,主要的目的就是threada->tthreadb->threadc->threada迴圈執行單個執行緒.

* 為了控制線程執行的順序

* 就必須確定喚醒,等待的順序,所以每乙個執行緒必須同時持有兩個物件鎖,才能繼續執行,

* 乙個物件鎖是prev,就是前乙個執行緒所持有的物件鎖.還有乙個就是自身物件鎖,

* 主要的思想就是,為了控制執行的順序,必須先持有prev鎖,也就是前乙個執行緒要釋放自身

* 的物件鎖,再去申請自身的物件鎖,兩者兼備是列印,之後首先呼叫self.notify()釋放自身物件鎖,

* 喚醒下乙個執行緒等待,在呼叫prev.wait()釋放prev物件鎖,終止當前程序,等待迴圈結束再次被喚醒

* *

* */

JAVA多執行緒列印ABC

多執行緒中乙個很有名的例題就是多執行緒列印 abc,要求用三個執行緒,分別是列印 a,列印 b,列印 c,輪流喚醒和鎖死,最終列印出10組 abc。created by 123 on 2016 8 30.public class printabc 將列印a,列印b,列印c分別列為三個互斥的方法,寫在...

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...