xiaobaiyang 发表于 2022-3-4 10:12:18

JAVA 线程通信问题请教

public class MyThreadPrinter {
    public static void main(String[] args) throws InterruptedException {

      Object a = new Object();
      Object b = new Object();
      Object c = new Object();

      ThreadPrinter A = new ThreadPrinter("A", c, a);
      ThreadPrinter B = new ThreadPrinter("B", a, b);
      ThreadPrinter C = new ThreadPrinter("C", b, c);

      Thread thread1 = new Thread(A);
      Thread thread2 = new Thread(B);
      Thread thread3 = new Thread(C);

      thread1.start();
      Thread.sleep(100);
      thread2.start();
      Thread.sleep(100);
      thread3.start();
      Thread.sleep(100);

    }

}


class ThreadPrinter implements Runnable {

    // 输出内容
    private String cxt;
    // 前一个obj
    private Object prev;
    // 当前obj
    private Object self;

    public ThreadPrinter(String cxt, Object prev, Object self) {
      this.cxt = cxt;
      this.prev = prev;
      this.self = self;
    }

    @Override
    public void run() {

      for (int i = 0; i < 10; i++) {
            synchronized (prev) {
                synchronized (self) {

                  System.out.println(cxt);

                  self.notify();


                  try {
                        prev.wait();
                  } catch (InterruptedException e) {
                        e.printStackTrace();
                  }
                }
            }
      }


      /*int count = 10;
      while (count > 0) {
            synchronized (prev) {
                synchronized (self) {
                  System.out.print(cxt);
                  count--;

                  self.notify();
                }
                try {
                  prev.wait();
                } catch (InterruptedException e) {
                  e.printStackTrace();
                }
            }

      }*/
    }
}
打印结果:



其中有个线程执行完状态变成下图所示:


跟自己预想的不太一样,麻烦大神帮忙解释一下

页: [1]
查看完整版本: JAVA 线程通信问题请教