Condition的使用
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Test {
public static void main(String[] args) {
final Busubess busubess = new Test.Busubess();
new Thread(new Runnable() {
@Override
public void run() {
for(int j=0;j<50;j++){
busubess.sub();
}
}
}).start();
for(int j=0;j<50;j++){
busubess.main();
}
}
static class Busubess{
Lock lock = new ReentrantLock();
Condition con = lock.newCondition();
private boolean bShouldSub = true;
public void sub(){
lock.lock();
try{
if(bShouldSub){
for(int i= 0 ;i<10 ;i++){
System.out.println("子线程第几次循环" + i);
}
bShouldSub = false;
try {
con.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
try {
con.signal();
} catch (Exception e) {
e.printStackTrace();
}
}
}finally{
lock.unlock();
}
}
public void main(){
lock.lock();
try{
if(!bShouldSub){
for(int i= 0 ;i<100 ;i++){
System.out.println("主线程第几次循环" + i);
}
bShouldSub = true;
try {
con.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
try {
con.signal();
} catch (Exception e) {
e.printStackTrace();
}
}
}finally{
lock.unlock();
}
}
}
}