java-线程-线程同步通信技术
源代码如下
public class TranditionalThreadCommunication {
/**
* @param args
*/
public static void main(String[] args) {
final Business business = new Business();
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i<50;i++){
business.sub(i);
}
}
}).start();
for(int i = 0; i < 50; i++){
business.main(i);
}
}
}
/**
* 这个类是线程同步的
* @author gavinlin
*
*/
class Business{
private boolean bShouldSub = true;
public synchronized void sub(int i){
while(bShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int j=0;j<10;j++){
System.out.println("subThread" + j +"loop " + i);
}
bShouldSub = !bShouldSub;
this.notify();
}
public synchronized void main(int i){
while(!bShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int j=0;j<100;j++){
System.out.println("mainThread" + j + "loop " + i);
}
bShouldSub = !bShouldSub;
this.notify();
}
}
上面的代码干了什么?
1.主要看main方法,生成了一个Business类的对象(先不管business里是干什么用的),然后开一个线程,循环50次调用business.sub,主线程也循环50次调用business.main
2.看看business里面实现了什么,sub方法就是重复10次打印信息,main方法重复100次调用打印信息。两个方法都做了同步,bShouldSub判断是否该运行方法,wait方法和notify方法是这里的重点,作用是如果该方法不该运行就阻塞(运行wait),方法运行完调用notify(通知正在wait的方法可以往下执行了)。
3.根据1和2,可以得出其运行结果是调用同一个business时sub打印10次信息,再到main打印100次信息,重复上述步骤50次
浙公网安备 33010602011771号