JAVA-多線程-三個線程按循序規(guī)則打印123-75

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * Created by jack on 2018/1/18.
 */

public class PrintAbc {
    public static void main(String[] args) {
        ReentrantLock lock = new ReentrantLock();
        Condition c1 = lock.newCondition();
        Condition c2 = lock.newCondition();
        Condition c3 = lock.newCondition();
        ThreadGroup group = new ThreadGroup("test");
        new Thread(group, new Print1(1, lock, c1, c2)).start();
        new Thread(group, new Print1(2, lock, c2, c3)).start();
        new Thread(group, new Print1(3, lock, c3, c1)).start();
        Thread.yield();

    }
}

class Print1 implements Runnable {

    public static volatile AtomicInteger printNumber = new AtomicInteger(1);
    private int threadId = 0;
    Condition current, next;
    ReentrantLock lock;

    public Print1(int threadId, ReentrantLock lock, Condition current, Condition next) {
        this.threadId = threadId;
        this.current = current;
        this.next = next;
        this.lock = lock;
    }

    @Override
    public void run() {
        while (printNumber.get() < 75) {
            lock.lock();
            for (int i = 0; i < 5; i++) {
                System.out.println("線程" + threadId + ":" + printNumber.getAndIncrement());
            }
            next.signalAll();
            try {
                current.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }

    }
}
public class PrintThree {

    public static void main(String[] args) {
        Object lockA = new Object();
        Object lockB = new Object();
        Object lockC = new Object();
        ThreadGroup aa = new ThreadGroup("test");
        new Thread(aa, new PrintRunable(1, lockC, lockA)).start();
        new Thread(aa, new PrintRunable(2, lockA, lockB)).start();
        new Thread(aa, new PrintRunable(3, lockB, lockC)).start();
        System.out.println("ed");

    }

}

class PrintRunable implements Runnable {
    public static volatile int printNum = 1;

    private int threadId = 0;
    Object prev = null;
    Object current = null;

    public PrintRunable(int threadId) {
        this.threadId = threadId;
    }

    public PrintRunable(int threadId, Object prev, Object current) {
        this.threadId = threadId;
        this.current = current;
        this.prev = prev;
    }

    @Override
    public synchronized void run() {
        while (true) {
            while (printNum < 75) {
                    synchronized (current) {
                        for (int i = 0; i < 5; i++) {
                            System.out.println("線程" + threadId + ":" + printNum++);
                        }
                        current.notifyAll();
                        try {
                            prev.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
            }
        }

    }
}
線程1:1
線程1:2
線程1:3
線程1:4
線程1:5
線程2:6
線程2:7
線程2:8
線程2:9
線程2:10
線程3:11
線程3:12
線程3:13
線程3:14
線程3:15
線程1:16
線程1:17
線程1:18
線程1:19
線程1:20
線程2:21
線程2:22
線程2:23
線程2:24
線程2:25
線程3:26
線程3:27
線程3:28
線程3:29
線程3:30
線程1:31
線程1:32
線程1:33
線程1:34
線程1:35
線程2:36
線程2:37
線程2:38
線程2:39
線程2:40
線程3:41
線程3:42
線程3:43
線程3:44
線程3:45
線程1:46
線程1:47
線程1:48
線程1:49
線程1:50
線程2:51
線程2:52
線程2:53
線程2:54
線程2:55
線程3:56
線程3:57
線程3:58
線程3:59
線程3:60
線程1:61
線程1:62
線程1:63
線程1:64
線程1:65
線程2:66
線程2:67
線程2:68
線程2:69
線程2:70
線程3:71
線程3:72
線程3:73
線程3:74
線程3:75
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末恩闻,一起剝皮案震驚了整個濱河市笨鸡,隨后出現(xiàn)的幾起案子饭庞,更是在濱河造成了極大的恐慌归粉,老刑警劉巖寇荧,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仍源,死亡現(xiàn)場離奇詭異地技,居然都是意外死亡原探,警方通過查閱死者的電腦和手機朗鸠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門蚯撩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烛占,你說我怎么就攤上這事胎挎。” “怎么了忆家?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵犹菇,是天一觀的道長。 經(jīng)常有香客問我芽卿,道長揭芍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任卸例,我火速辦了婚禮称杨,結果婚禮上,老公的妹妹穿的比我還像新娘筷转。我一直安慰自己姑原,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布旦装。 她就那樣靜靜地躺著页衙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上店乐,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天艰躺,我揣著相機與錄音,去河邊找鬼眨八。 笑死腺兴,一個胖子當著我的面吹牛,可吹牛的內容都是我干的廉侧。 我是一名探鬼主播页响,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼段誊!你這毒婦竟也來了闰蚕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤连舍,失蹤者是張志新(化名)和其女友劉穎没陡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體索赏,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡盼玄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了潜腻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埃儿。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖融涣,靈堂內的尸體忽然破棺而出童番,到底是詐尸還是另有隱情,我是刑警寧澤暴心,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布妓盲,位于F島的核電站杂拨,受9級特大地震影響专普,放射性物質發(fā)生泄漏。R本人自食惡果不足惜弹沽,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一檀夹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧策橘,春花似錦炸渡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春吼畏,著一層夾襖步出監(jiān)牢的瞬間督赤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工泻蚊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躲舌,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓性雄,卻偏偏與公主長得像没卸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秒旋,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351