您的位置:首页 > 大数据 > 人工智能

练习题之Wait/Notify

2016-05-17 23:10 465 查看
方案一:

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();
}
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: