package duoxiancheng;
public class MyThreadTest2 {
public static void main(String[] args) throws InterruptedException{
final MyService ms = new MyService();
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 1; i <=50;i++){
ms.sub(i);
}
}
}).start();
//让子线程先跑
Thread.sleep(1000);
//main方法本身即为主线程
for(int i = 1;i <= 50;i++){
ms.main(i);
}
}
static class MyService{
boolean beShouldSub = true;//是否执行子线程标志位
//子线程循环10次
public synchronized void sub(int i) {
if(!beShouldSub){
try {
this.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
for(int j =1;j<=10;j++){
System.out.println("sub thread sequeue of " + j + "loop of " + i);
}
beShouldSub = false;//子线程执行完毕,子线程标志位设为false
this.notify();//唤醒主线程
}
//主线程循环100次
public synchronized void main(int i) {
if(beShouldSub){
try {
this.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
for(int j = 1; j <= 100; j++){
System.out.println("Main thread sequeue of " + j + "loop of " + i);
}
beShouldSub = true;//主线程执行完毕,子线程标志位设为true
this.notify();//唤醒子线程
}
}
}