0
点赞
收藏
分享

微信扫一扫

线程condition

王远洋 2022-11-04 阅读 85

package com.ygl;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class Business {
Lock lock=new ReentrantLock();
Condition condition =lock.newCondition();
private boolean isShouldSub=true;
//主线程、子线程关联的代码归为一类
public void sub(int i){
lock.lock();
try{
while(!isShouldSub){
try{
condition.await();
}catch(Exception e){

}
}
for(int j=0;j<10;j++){
System.out.println("sub thread"+i+"========"+j);
}
isShouldSub=false;
condition.signal();
}finally{
lock.unlock();
}

}

public void main(int i){
lock.lock();
try{
while(isShouldSub){
try{
condition.await();
}catch(Exception e){

}
}
for(int j=0;j<100;j++){
System.out.println("main thread"+i+"========"+j);
}
isShouldSub=true;
condition.signal();
}finally{
lock.unlock();
}
}

}//**********************************************
package com.ygl;
public class CommunicationRunnable implements Runnable{
private Business business;
public CommunicationRunnable() {

}
public CommunicationRunnable(Business business) {
this.business=business;
}
@Override
public void run() {
for(int i=1;i<=50;i++){
business.sub(i);

}


}

}//*package com.ygl;
public class TraditionalThreadCommunication {

public static void main(String[] args) {
Business business=new Business();
CommunicationRunnable communicationRunnable=new CommunicationRunnable(business);
Thread thread=new Thread(communicationRunnable);
thread.start();
for(int i=1;i<=50;i++){
business.main(i);

}
}
}
***************************************

举报

相关推荐

0 条评论