练习题之Wait/Notify

Posted 异想天开

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习题之Wait/Notify相关的知识,希望对你有一定的参考价值。

方案一:

public class PrintABC {
  public static void main(String[] args) {
    AtomicInteger synObj = new AtomicInteger(0);
    Runnable r = new ThreadModel(synObj);
    new Thread(r,"A").start();
    new Thread(r,"B").start();
    new Thread(r,"C").start();
  }
}

public class ThreadModel implements Runnable {
 public volatile AtomicInteger ato;
  
 public ThreadModel(AtomicInteger ato) {
    this.ato = ato;
 }

 public void run() {
  for(int i=0;i<10;i++) {
    synchronized(ato) {
      if(ato.get()%3==0) {
         System.out.println("A);
         ato.set(ato.get()+1);
         ato.notifyAll();
      } else if(ato.get()%3==1) {
         System.out.println("B);
         ato.set(ato.get()+1);
         ato.notifyAll();
      } else if(ato.get()%3==2) {
         System.out.println("C);
         ato.set(ato.get()+1);
         ato.notifyAll();
      } else {
         ato.wait();
      }
    }
  }
 }
}

方案二:

public class printABC {
 
 public static void main(String [] args) {
   AtomicInteger ato = new AtomicInteger(0);
   ThreadModel modelA = new ThreadModel(ato,"A",0);
   ThreadModel modelB = new ThreadModel(ato,"B",0);
   ThreadModel modelC = new ThreadModel(ato,"C",0);
   new Thread(modelA).start();
   new Thread(modelB).start();
   new Thread(modelC).start();
 }
  
}

public class ThreadModel {
 
  private AtomicInteger ato;
  private String printChar;
  private int flag;
  private int count = 0;
  public ThreadModel(AtomicInteger ato,String printChar,int flag) {
    this.ato = ato;
    this.printChar = printChar;
    this.flag = flag;
  }
 
 public void run() {
    synchronized(ato) {
       while(true) {
          if(ato.get()%3==flag) {
             System.out.println(printChar);
             ato.set(ato.get()+1);
             ato.notifyAll();
             count++;
             if(count==10) {
                break;
              }
          }else {
             ato.wait();
          }
       }
    }
 }
 
}

 

以上是关于练习题之Wait/Notify的主要内容,如果未能解决你的问题,请参考以下文章

JAVA多线程之wait/notify

Java多线程基础之wait,notify

JUC并发编程 -- 为什么需要wait/notify方法 & 原理之 wait / notify & wait() 和 notify() API介绍

Java 线程通信之 wait/notify 机制

Java 线程通信之 wait/notify 机制

Java 线程通信之 wait/notify 机制