static voidtestLock1(){final AtomicInteger waitCount = new AtomicInteger(30000);final Object waitObj = newObject();
System.out.println("start"+System.currentTimeMillis());for (int i=0;i<30000;i++) {new Thread(newRunnable() {
@Overridepublic voidrun() {try{
Thread.sleep(10);
}catch(InterruptedException e) {
e.printStackTrace();
}
waitCount.decrementAndGet();synchronized(waitObj){
waitObj.notifyAll();
}
}
}).start();
}while( waitCount.intValue()>0) {synchronized(waitObj) {if(waitCount.intValue()>0){try{
waitObj.wait();
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
System.out.println("ok"+System.currentTimeMillis());
}static voidtestLock2(){final CountDownLatch workLauch = new CountDownLatch(30000);//计数器
System.out.println("start2"+System.currentTimeMillis());for (int i=0;i<30000;i++) {new Thread(newRunnable() {
@Overridepublic voidrun() {try{
Thread.sleep(10);
}catch(InterruptedException e) {
e.printStackTrace();
}
workLauch.countDown();
}
}).start();
}try{
workLauch.await();
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println("ok2"+System.currentTimeMillis());
}public static voidmain(String[] args) {
testLock1();
testLock2();
}