美文网首页
Java经典线程问题:三个打印机轮流打字

Java经典线程问题:三个打印机轮流打字

作者: d394af621d4c | 来源:发表于2017-12-17 00:06 被阅读25次

    线程间的通信其实是非常复杂的,这里是一个经典的线程加锁通信的问题。A, B, C三个打印机,每个打印机是一个线程,现在要求写一个程序,让A,B,C轮流打印自己的名字,每个打四次。

    
    
    public class Printer extends Thread {
        private String msg;
        private Printer next;
    
        public Printer(String msg) {
            this.msg = msg;
        }
    
        @Override
        public void run() {
    
            for (int i = 1; i < 5; i++) {
                synchronized (this) {
                    try {
                        this.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("第" + i + "次:" + this.msg);
    
                    synchronized (this.next) {
                        this.next.notify();
                    }
                }
            }
        }
    
        public static void main(String[] args) {
            Printer A = new Printer("A");
            Printer B = new Printer("B");
            Printer C = new Printer("C");
            A.next = B;
            B.next = C;
            C.next = A;
    
            A.start();
            B.start();
            C.start();
    
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            synchronized (A) {
    
                A.notify();
    
            }
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:Java经典线程问题:三个打印机轮流打字

          本文链接:https://www.haomeiwen.com/subject/xkaewxtx.html