Java NIO - CountDownLatch

来源:互联网 发布:广东高考难度 知乎 编辑:程序博客网 时间:2024/06/02 08:04

CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束。

下面开启两个线程,一个用来插入订单操作,一个用来模拟合并订单操作。

  1. @Test
  2. //    @Transactional
  3.    public void testAutoMergeSplit03() throws Exception {
  4.        //初始化两条数据
  5.        int num = 20;
  6.        List<TbTrade> tbTrades = initTrade(num);
  7.        final MergeThread mt = new MergeThread();
  8.        mt.tbTrades = tbTrades;
  9.        countDownLatch = new CountDownLatch(2);
  10.        Thread insertThread = new Thread(new Runnable() {
  11.            @Override
  12.            public void run() {
  13.                try {
  14.                    countDownLatch.await();
  15.                    System.out.println(System.nanoTime() + "- mt.insert() start");
  16.                    mt.insert();
  17.                } catch (InterruptedException e) {
  18.                    e.printStackTrace();
  19.                }
  20.            }
  21.        });
  22.        insertThread.start();
  23.        countDownLatch.countDown();
  24.        Thread mergeThread = new Thread(new Runnable() {
  25.            @Override
  26.            public void run() {
  27.                try {
  28.                    countDownLatch.await();
  29.                    System.out.println(System.nanoTime() + "- mt.merge() start");
  30.                    mt.merge();
  31.                } catch (InterruptedException e) {
  32.                    e.printStackTrace();
  33.                }
  34.            }
  35.        });
  36.        mergeThread.start();
  37.        countDownLatch.countDown();
  38.        Thread.sleep(10000);
  39.    }



输出线程的执行时间,我们可以看到线程是在同时启动。

这样子就可以模拟一些多线程并发执行的场景。



1 0
原创粉丝点击