//先运行TraditionalThreadCommunition的主线程的内容,bShouldSub为false,故线程暂停,进入子线程,运行完后启动正在等待的主线程,运行完后进入50次的循环
public class TraditionalThreadCommunition {
public static void main(String[]args) {
final Business business=new Business();
new Thread(new Runnable() {
public void run() {
System.out.println("子线程");
for(int i=1;i<=50;i++) {
business.sub(i);
}
}
}
).start();
System.out.println("主线程");
for(int i=1;i<=50;i++) {
business.main(i);
}
}
}
class Business{
private boolean bShouldSub=true;
public synchronized void sub(int i) {
while(!bShouldSub) { //可能是伪唤醒 故使用while
try {
this.wait();
}catch(InterruptedException e) {
e.printStackTrace();
}
}
for(int j=1;j<=10;j++) {
System.out.println("子线程"+j+" "+i+"圈");
}
bShouldSub=false;
this.notify(); //启动上面正在等待的线程
}
public synchronized void main(int i) {
while(bShouldSub) {
try {
this.wait();
}catch(InterruptedException e) {
e.printStackTrace();
}
}
for(int j=1;j<=100;j++) {
System.out.println("主线程"+j+" "+i+"圈");
}
bShouldSub=true;
this.notify();
}
}
子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着再回到主线程100次,如此循环50次
最新推荐文章于 2019-10-27 21:00:35 发布