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