public class TraditionalThreadCommunication {
public static void main(String[] args) {
final Business business = new Business();
new Thread() {
@Override
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 {
boolean isShouldSub = true;
public synchronized void sub(int times) {
while (!isShouldSub) {
try {
//wait必须和synchronized结合使用,并且用的互斥对象必须一样,这里都用的this
//线程执行到this.wait()后就进入等待,直到this对象的notifyAll或者notify方法被调用
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 10; i++) {
System.out.println("sub--" + times + ":" + i);
}
isShouldSub = false;
//该方法会唤醒调用过this.wati()的线程,让他们继续执行
this.notifyAll();
}
public synchronized void main(int times) {
while (isShouldSub) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 100; i++) {
System.out.println("main--" + times + ":" + i);
}
isShouldSub = true;
this.notifyAll();
};
}