Java多线程——交替输出

设置两个线程交替输出"1 2 1 2 1 2…"

1. 定义一个全局锁对象

为了保证两个线程使用的一定是同一个锁,我们创建一个对象作为静态属性放到一个类中, 这个对象就用来充当锁

public class MyLock {
    /**
     * 定义锁
     */
    public static Object object = new Object();
}

2. 定义一个线程输出1,另外一个线程输出2

该线程输出十次 1,使用 MyLock.o 作为锁,每输出一个 1 就唤醒另一个线程,然后自己休眠并释放锁。

public class ThreadForNum1 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            synchronized (MyLock.object) {
                System.out.println("1");
                MyLock.object.notify();
                try {
                    //如果循环结束,就不需要当前线程等待了
                    if (i ==9){
                        return;
                    }
                    MyLock.object.wait();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

该线程输出十次 2,使用 MyLock.o 作为锁,每输出一个 2 就唤醒另一个线程,然后自己休眠并释放锁。

public class ThreadForNum2 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            synchronized (MyLock.object) {
                System.out.println("2");
                MyLock.object.notify();
                try {
                    //如果循环结束,就不需要当前线程等待了
                    if (i ==9){
                        return;
                    }
                    MyLock.object.wait();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

版权声明:本文为weixin_42275702原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。