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

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);

}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ygl6150373

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值