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