package cn.itcast.heima2;
/*
* 子线程循环10次,接着主线程循环100次,接着又回到子线程循环10次,接着又回到主线程又循环100次,
* 如此循环50次。请写出程序
*
*/
public class TraditionalThreadCommunication {
public static void main(String[] args) {
final BusinessLogic business = new BusinessLogic();
new Thread(new Runnable() {//子线程
@Override
public void run() {
for (int j = 1; j <= 50; j++) {
business.sub(j);
}
}
}).start();
for (int j = 1; j <= 50; j++) {//主线程
business.main(j);
}
}
}
class BusinessLogic {
private boolean shouldBeSub = true;
public synchronized void sub(int j) {//同步
while(!shouldBeSub){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 10; i++) {
System.out.println("sub thread sequence of " + i + ",loop of " + j);
}
shouldBeSub=false;
this.notify();//通信
}
public synchronized void main(int j) {//同步
while(shouldBeSub){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 1; i <= 100; i++) {
System.out.println("main thread sequence of " + i + ",loop of " + j);
}
shouldBeSub=true;
this.notify();//通信
}
}
/*
*
* 经验:要用到共同数据(包括同步锁)或共同算法的若干个方法应该归在同一个类身上,这种设计正好体现了高类聚和程序的健壮性.
*
*
* */
多线程编程入门(6):一道线程同步与通信面试题
最新推荐文章于 2023-11-24 16:00:53 发布