import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Q56_1 {
private static Lock lock=new ReentrantLock();
private static Condition subThreadCondition=lock.newCondition();
private static boolean bBooleanSubThread=false;
public static void main(String[] args) {
ExecutorService threadPool=Executors.newFixedThreadPool(3);
threadPool.execute(new Runnable(){
public void run(){
for(int i=0;i<50;i++){
lock.lock();
if(!bBooleanSubThread){
try {
subThreadCondition.await();
for(int j=0;j<10;j++){
System.out.println(Thread.currentThread().getName()+"j="+j);
}
bBooleanSubThread =false;
subThreadCondition.signal();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
lock.unlock();
}
}
}
}
});
threadPool.shutdown();
for(int i=0;i<50;i++){
lock.lock();
try {
if(bBooleanSubThread)
subThreadCondition.await();
for(int j=0;j<10;j++){
System.out.println(Thread.currentThread().getName()+j);
}
bBooleanSubThread =true;
subThreadCondition.signal();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
lock.unlock();
}
}
}
}