/**
*将线程要运行的逻辑代码及数据同步相关的锁,放在同一个类中,这里是Business类,数据同步由Business类维护
*而与线程控制相关的代码分开,指的是线程类本身
*
*/
public class CommunicationTest {
public static void main(String[] args) {
Business business = new Business();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 50; i++) {
business.main(i);
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 50; i++) {
business.sub(i);
}
}
}).start();
}
}
class Business {
private boolean isShouldSub = false;
public synchronized void sub(int i) {
while (!isShouldSub) {
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int j = 1; j <= 10; j++) {
System.out.println("sub thread sequence of " + j + " , loop of " + i);
}
isShouldSub = false;
this.notify();
}
public synchronized void main(int i) {
while (isShouldSub) {
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for (int j = 1; j <= 30; j++) {
System.out.println("main thread sequence of " + j + " , loop of " + i);
}
isShouldSub = true;
this.notify();
}
}