您的位置:首页 > 其它

多线程和并发库应用四-传统线程通信

2018-01-06 17:26 363 查看
本节通过一个案例来实现线程之间的通信。

现在有一个需求需要子线程循环10次,主线程循环100次,子线程循环10次,主线程循环100次,依次往复50次。。。。

public class Business {
private boolean bShouldSub=true;
public synchronized  void sub(int i){
while (!bShouldSub){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int j=1;j<=10;j++){
System.out.println("sub sequece "+i+" loop for "+j);
}
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 sequece "+i+" loop for "+j);
}
bShouldSub=true;
this.notify();
}
}


用一个标识量来标识当前是谁在运行bShouldSub

当不是当前线程运行时等待当前线程运行结束后唤醒并改变标志量

public class Main {
public  static  void main(String[] args){
final Business bs=new Business();
new Thread(new Runnable() {
public void run() {
for (int i=1;i<=50;i++){
bs.sub(i);
}
}
}).start();
new Thread(new Runnable() {
public void run() {
for (int i=1;i<=50;i++){
bs.main(i);
}
}
}).start();
}
}


启动两个线程调用即可

文章地址:http://www.haha174.top/article/details/254220

项目源码:https://github.com/haha174/thread-learning.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐