子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程循环100,如此循环50次,请写出程序。
面向对象设计经验:如要用到共同数据(包括同步锁)或共同算法的若干个方法应该归在同一个类身上,这种设计正好体现了高内聚和程序的健壮性。
public class TradtionalThreadCommunication {
static boolean threadFlag=false;
public static void main(String[] args) throws Exception{
final Business business = new Business();
new Thread(new Runnable(){
public void run(){
for(int i=1;i<=50;i++){
business.sub(i);
}
}
}).start();
for(int i=1;i<=50;i++){
business.main(i);
}
}
}
class Business{
private boolean flag=false;
public synchronized void main(int i){
while(!flag){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j=1;j<=100;j++){
System.out.println("main loop: i="+i+",j="+j);
}
flag=false;
this.notify();
}
public synchronized void sub(int i){
while(flag){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j=1;j<=10;j++){
System.out.println("sub loop: i="+i+",j="+j);
}
flag=true;
this.notify();
}
}