Java三线程输出”EDU“

内容纲要
package Thread;

public class MyThread extends Thread {
    private static Object o = new Object();// 对象锁,必须是static
    private static int count = 0;// 控制输出哪个字母
    private char ID;// 字母
    private int id;// 字母对应的数字
    private int num = 0;// 打印次数

    public MyThread(int id, char ID) {
        this.id = id;
        this.ID = ID;
    }

    public static void main(String[] args) {
        (new MyThread(0, 'E')).start();
        (new MyThread(1, 'D')).start();
        (new MyThread(2, 'U')).start();
    }

    @Override
    public void run() {
        synchronized (o) {
            while (num < 10) {
                if (count % 3 == id) {
                    System.out.print(ID);
                    ++count;
                    ++num;
                    // 唤醒所有等待线程
                    o.notifyAll();
                } else {
                    try {
                        // 如果不满足条件,则阻塞等待
                        o.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注