方案一:
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(); } } } } }
时间: 2024-10-24 08:16:15