三個線程交替打印1-100

package xyz.coolblog.ti;

/**
 * @Auther: miv
 * @Date: 2019-09-08 16:34
 * @Web: www.xiejx.cn
 * @Email: [email protected]
 * @Description:
 */
public class Test {
    volatile int i = 1;

    public static void main(String[] args) throws Exception {
        Test obj = new Test();


        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                while (obj.i <= 100) {
                    // 上鎖當前對象
                    synchronized (this) {

                        // 喚醒另一個線程
                        notifyAll();
                        if (obj.i == 101) {
                            return;
                        }

                        int i = new Integer(Thread.currentThread().getName());
                        if (obj.i % 3 == i) {
                            System.out.println("Thread " + Thread.currentThread().getName() + " " + obj.i++);
                        }
                        if(obj.i % 3==1){
                            System.out.println("==========");
                        }
                        try {
                            if (obj.i == 101) {
                                notifyAll();
                                return;
                            } else {
                                // 釋放掉鎖
                                wait();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        };

        // 啓動多個線程(想創建幾個就創建幾個)
        Thread t1 = new Thread(runnable);
        Thread t2 = new Thread(runnable);
        Thread t3 = new Thread(runnable);

        t1.setName("1");
        t2.setName("2");
        t3.setName("0");
        t1.start();
        t2.start();
        t3.start();


    }


}


運行結果

Thread 1 1
Thread 2 2
Thread 0 3
==========
Thread 1 4
Thread 2 5
Thread 0 6
==========
Thread 1 7
Thread 2 8
Thread 0 9
==========
Thread 1 10
Thread 2 11
Thread 0 12
==========
Thread 1 13
Thread 2 14
Thread 0 15
==========
Thread 1 16
Thread 2 17
Thread 0 18
==========
Thread 1 19
Thread 2 20
Thread 0 21
==========
Thread 1 22
Thread 2 23
Thread 0 24
==========
Thread 1 25
Thread 2 26
Thread 0 27
==========
Thread 1 28
Thread 2 29
Thread 0 30
==========
Thread 1 31
Thread 2 32
Thread 0 33
==========
Thread 1 34
Thread 2 35
Thread 0 36
==========
Thread 1 37
Thread 2 38
Thread 0 39
==========
Thread 1 40
Thread 2 41
Thread 0 42
==========
Thread 1 43
Thread 2 44
Thread 0 45
==========
Thread 1 46
Thread 2 47
Thread 0 48
==========
Thread 1 49
Thread 2 50
Thread 0 51
==========
Thread 1 52
Thread 2 53
Thread 0 54
==========
Thread 1 55
Thread 2 56
Thread 0 57
==========
Thread 1 58
Thread 2 59
Thread 0 60
==========
Thread 1 61
Thread 2 62
Thread 0 63
==========
Thread 1 64
Thread 2 65
Thread 0 66
==========
Thread 1 67
Thread 2 68
Thread 0 69
==========
Thread 1 70
Thread 2 71
Thread 0 72
==========
Thread 1 73
Thread 2 74
Thread 0 75
==========
Thread 1 76
Thread 2 77
Thread 0 78
==========
Thread 1 79
Thread 2 80
Thread 0 81
==========
Thread 1 82
Thread 2 83
Thread 0 84
==========
Thread 1 85
Thread 2 86
Thread 0 87
==========
Thread 1 88
Thread 2 89
Thread 0 90
==========
Thread 1 91
Thread 2 92
Thread 0 93
==========
Thread 1 94
Thread 2 95
Thread 0 96
==========
Thread 1 97
Thread 2 98
Thread 0 99
==========
Thread 1 100

Process finished with exit code 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章