欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

两个线程一次打印数字  

程序员文章站 2024-01-22 13:13:10
...
public class Test {
    private static boolean flag = true;
    private static final Object LOCK = new Object();
    private static int i=0;
    public static void print(String name){
        i++;
        System.out.println(name+"------"+i);
    }
    public static void main(String[] args) {
        // 两个线程 交替打印字符串
        Thread a = new Thread() {
            public void run() {
                while (i < 100)
                    synchronized (LOCK) {
                        {
                            if (false == flag) {
                                try {
                                    LOCK.wait();// 在wait后的瞬间线程b得到锁
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            flag = false;
                            print(getName());
                            LOCK.notify();// 在这里虽然唤醒了另一个线程b,但锁并没有释放
                        }
                    }
            };
        };
        Thread b = new Thread() {
            public void run() {
                while (1<100)
                    synchronized (LOCK) {
                        {
                            if (true == flag) {
                                try {
                                    LOCK.wait();// 在wait后的瞬间线程b得到锁
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            flag = true;
                            print(getName());
                            LOCK.notify();// 在这里虽然唤醒了另一个线程b,但锁并没有释放
                        }
                    }
            };
        };
        a.start();
        b.start();
    }
}