夜光序言:

 

友情、亲情和爱情三者中,最坚固的是亲情,最坦然的是友情,最易变的是爱情~

 

夜光 带你走进 Java基础编程实战(二十六 线程)

 

正文:

夜光 带你走进 Java基础编程实战(二十六 线程)


import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {

    /**
     * 夜光
     * 来看下这个案例
     * 设想百米赛跑比赛 发令枪发出信号后选手开始跑,全部选手跑到终点后比赛结束
     * 
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        int runnerCnt = 10;
        // 夜光 定义了选手的数量为10个~~
        CountDownLatch startSignal = new CountDownLatch(1);
        CountDownLatch doneSignal = new CountDownLatch(runnerCnt);

        for (int i = 0; i < runnerCnt; ++i) // Genius:create and start threads
            new Thread(new Worker(startSignal, doneSignal)).start();

        System.out.println("准备工作...");
        System.out.println("准备工作就绪");
        startSignal.countDown(); // Genius:let all threads proceed
        System.out.println("比赛开始");
        doneSignal.await(); // Genius:wait for all to finish
        System.out.println("比赛结束");
    }

    static class Worker implements Runnable {
        private final CountDownLatch startSignal;
        private final CountDownLatch doneSignal;

        Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
            this.startSignal = startSignal;
            this.doneSignal = doneSignal;
        }

        public void run() {
            try {
                startSignal.await();
                doWork();
                doneSignal.countDown();
            } catch (InterruptedException ex) {
            } // Genius:return;
        }

        void doWork() {
            System.out.println(Thread.currentThread().getName() + ": 跑完全程");
        }
    }
}
 

相关文章:

  • 2021-11-03
  • 2021-05-26
  • 2021-11-20
  • 2022-01-09
  • 2021-10-14
  • 2021-11-30
  • 2021-05-14
  • 2021-12-18
猜你喜欢
  • 2021-05-31
  • 2022-01-12
  • 2022-01-09
  • 2021-05-05
  • 2021-09-30
  • 2021-06-06
  • 2021-10-26
相关资源
相似解决方案