本节通过一个案例来实现线程之间的通信。
现在有一个需求需要子线程循环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