练习题之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的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 -- 为什么需要wait/notify方法 & 原理之 wait / notify & wait() 和 notify() API介绍