Java线程输出ABCD


Java线程输出ABCD

package xufeng.java;
public class Printer implements Runnable{
    // 输出字符
    String printStr = null;
         
    // 下一个输出对象
    Printer nextPrinter = null;
         
    public Printer(String str)
    {
        printStr = str;
    }
         
    public void setNextPrinter(Printer nextPr)
    {
        nextPrinter = nextPr;
    }
         
    @Override
    public void run() {
        for (int i = 0; i < 10; i++)
        {
            synchronized (nextPrinter) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.print(printStr);
                nextPrinter.notifyAll();
            }
                 
            synchronized (this) {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
             
    }
}

package xufeng.java;
public class MainTest {
    /**
    * @param args
    * @throws InterruptedException
    */
    public static void main(String[] args) throws InterruptedException {
        Printer a = new Printer("A");
        Printer b = new Printer("B");
        Printer c = new Printer("C");
        Printer d = new Printer("D");
           
        // 设置前后关系
        a.setNextPrinter(b);
        b.setNextPrinter(c);
        c.setNextPrinter(d);
        d.setNextPrinter(a);
        // 启动线程。相隔一秒以免初始输出顺序混乱
        new Thread(a).start();
        Thread.sleep(1000);
        new Thread(b).start();
        Thread.sleep(1000);
        new Thread(c).start();
        Thread.sleep(1000);
        new Thread(d).start();
    }
}

相关内容