JDK8 Stream CountDownLatch

test.stream()
.sorted(Comparator.comparing(TestStudent::getBirthDay).reversed())
.collect(Collectors.toList());

 

加reversed()为倒序并发

 

 

CountDownLatch 类学习:ide

有任务ABC时,若是须要将AB都执行完成后,再执行C任务。而AB任务又是能够并发执行的。那么可使用CountDownLatch类来控制执行C的时机。学习

初始化一个CountDownLatch   实例时,必须指定一个int类型的数值。线程

CountDownLatch    cdl=new CountDownLatch(2);get

当A任务执行完时,进行cdl.countDown()方法。将值减1。it

当B任务执行完时,进行cdl.countDown()方法。将值 减1。io

在执行C任务以前,加上cdl.await()方法。任务将一块儿阻塞,一直循环判断cdl的值是否为0。test

若是为0则开始执行c任务。这里也能够设定等待的时间。stream

countDownLatch.await(30, TimeUnit.SECONDS);

若是在指定时间内,AB任务都没有完成。则C任务继续执行。  sed

 

代码及执行结果以下:

@Test
public  void  testCountDownLatch() throws InterruptedException {
    CountDownLatch countDownLatch=new CountDownLatch(2);
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("线程1");
             countDownLatch.countDown();
        }
    }).start();
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("线程2");
            countDownLatch.countDown();
        }
    }).start();
    countDownLatch.await();
    System.out.println("主线程");
}

 

运行结果:

线程1
线程2
主线程

注释掉

countDownLatch.await();

运行结果:

线程1
主线程

线程2

相关文章
相关标签/搜索