0
点赞
收藏
分享

微信扫一扫

线程condition(二)控制线程通知

雷亚荣 2022-11-04 阅读 69

package com.ygl;



public class CommunicationRunnable2 implements Runnable{

private Business business;

public CommunicationRunnable2() {


}

public CommunicationRunnable2(Business business) {

this.business=business;

}

@Override

public void run() {

for(int i=1;i<=50;i++){

business.sub2(i);


}


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

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

}
}//**********************************************
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 condition1 =lock.newCondition();
Condition condition2 =lock.newCondition();
Condition condition3 =lock.newCondition();
private int isShouldSub=1;
//主线程、子线程关联的代码归为一类
public void sub2(int i){
lock.lock();
try{
while(isShouldSub!=2){
try{
condition2.await();
}catch(Exception e){

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

}
//主线程、子线程关联的代码归为一类
public void sub3(int i){
lock.lock();
try{
while(isShouldSub!=3){
try{
condition3.await();
}catch(Exception e){

}
}
for(int j=0;j<20;j++){
System.out.println("sub3 thread"+i+"========"+j);
}
isShouldSub=1;
condition1.signal();
}finally{
lock.unlock();
}

}
public void main(int i){
lock.lock();
try{
while(isShouldSub!=1){
try{
condition1.await();
}catch(Exception e){

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

}//****************************************
package com.ygl;


public class TraditionalThreadCommunication {

public static void main(String[] args) {
Business business=new Business();
CommunicationRunnable2 communicationRunnable2=new CommunicationRunnable2(business);
Thread thread2=new Thread(communicationRunnable2);
CommunicationRunnable3 communicationRunnable3=new CommunicationRunnable3(business);
Thread thread3=new Thread(communicationRunnable3);
thread2.start();
thread3.start();
for(int i=1;i<=50;i++){
business.main(i);

}
}
}

举报

相关推荐

0 条评论