您的位置:首页 > 其它

4.传统线程同步通信技术

2015-07-10 11:08 197 查看
/**
* 传统线程同步通信技术
*
* *******************************************
* 经验:
*       要用到共同数据(包括共同锁)或共同算法的若干个方法应该
* 归在用一个类身上,这种设计正好体现了高内聚和程序的健壮性。
*
* *******************************************
*
* @author LiTaiQing
*/
public class TraditionalThreadCommunication {

/**************************************************
* 调试小技巧
* 如果由于Console的输出太多而造成面板显示的数据不完整
* 可设置运行前参数设置
* 右键->Run As->Run Configuractions->Common->File
* 选择保存的路径即可
*
**************************************************
*/

/**
* 面试题
* ·子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,
* ·接着再回到主线程又循环100,如此循环50次,请写出程序
*/
public static void main(String[] args){

final Business business = new Business();
new Thread(new Runnable(){
@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{
private boolean bShouldSub = true;
public synchronized void sub(int i){
/**
* 此处将if改为while,增强代码健壮性。
* 防止伪唤醒!
*/
while(!bShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j = 1; j <= 10; j++){
System.out.println("sub thread sequece of " + j + ",loop of " +i);
}
bShouldSub = false;
this.notify();
}
public synchronized void main(int i){
while(bShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j = 1; j <= 100; j++){
System.out.println("main thread sequece of " + j + ",loop of " +i);
}
bShouldSub = true;
this.notify();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: