用两个线程交替打印0~100的数,使用Object对象的wait()和notify()

wait()notify()用作两个互斥锁,用两个线程交替打印0~100的数,一个线程打印奇数,一个线程打印偶数。两个线程使用同一把锁,每个线程打印完数字,就把锁释放,并唤醒另一个线程来继续打印。

public class PrintOddEvenNumber implements Runnable{
    private int count = 0;
    private Object object = new Object();

    @Override
    public void run() {
        while (count <= 100) {
            synchronized (object) {
                System.out.println(Thread.currentThread().getName() + ":" + count++);
                // 先要唤醒另一个线程
                object.notify();
                try {
                	// 如果最后一个线程打印的数为100.那么就不再继续等待了,直接执行完毕
                    if (count <= 100) {
                    	// 再进行释放锁
                        object.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        PrintOddEvenNumber poen = new PrintOddEvenNumber();
        new Thread(poen, "偶数").start();
        // 为了防止奇数偶数显示错乱,让第一个线程打印完毕后,先等待5ms
        try {
            Thread.currentThread().sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        new Thread(poen, "奇数").start();
    }
}

你可能感兴趣的:(java)