本帖最后由 yanghao 于 2014-10-3 14:14 编辑
downSingal 的作用是什么 类似一个阻塞锁吗
import java.util.Random;
import java.util.concurrent.CountDownLatch;
class Driver { // ...
public static void main(String[] argus) throws InterruptedException {
CountDownLatch startSignal = new CountDownLatch(1);
CountDownLatch doneSignal = new CountDownLatch(3);
for (int i = 0; i < 3; ++i) // create and start threads
new Thread(new Worker2(startSignal, doneSignal)).start();
System.out.println(Thread.currentThread().getName()+1); // don't let run yet
startSignal.countDown(); // let all threads proceed
Thread.sleep(new Random().nextInt(3000));
System.out.println(Thread.currentThread().getName()+2);
// doneSignal.countDown();
// doneSignal.countDown();
// doneSignal.countDown();
doneSignal.await(); // wait for all to finish 在此处堵塞,只有计数器减为零才继续
System.out.println("over");
}
}
class Worker2 implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
Worker2(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
}
public void run() {
try {
startSignal.await();
Thread.sleep(new Random().nextInt(3000));
doWork();
doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
}
void doWork() { System.out.println(Thread.currentThread().getName()+3); }
}
- import java.util.Random;
- import java.util.concurrent.CountDownLatch;
- class Driver { // ...
- public static void main(String[] argus) throws InterruptedException {
- CountDownLatch startSignal = new CountDownLatch(1);
- CountDownLatch doneSignal = new CountDownLatch(3);
- for (int i = 0; i < 3; ++i) // create and start threads
- new Thread(new Worker2(startSignal, doneSignal)).start();
- System.out.println(Thread.currentThread().getName()+1); // don't let run yet
- startSignal.countDown(); // let all threads proceed
- Thread.sleep(new Random().nextInt(3000));
- System.out.println(Thread.currentThread().getName()+2);
- // doneSignal.countDown();
- // doneSignal.countDown();
- // doneSignal.countDown();
- doneSignal.await(); // wait for all to finish 在此处堵塞,只有计数器减为零才继续
- System.out.println("over");
- }
- }
- class Worker2 implements Runnable {
- private final CountDownLatch startSignal;
- private final CountDownLatch doneSignal;
- Worker2(CountDownLatch startSignal, CountDownLatch doneSignal) {
- this.startSignal = startSignal;
- this.doneSignal = doneSignal;
- }
- public void run() {
- try {
- startSignal.await();
- Thread.sleep(new Random().nextInt(3000));
- doWork();
- doneSignal.countDown();
- } catch (InterruptedException ex) {} // return;
- }
- void doWork() { System.out.println(Thread.currentThread().getName()+3); }
- }
复制代码
|
|