test.stream() .sorted(Comparator.comparing(TestStudent::getBirthDay).reversed()) .collect(Collectors.toList());
加reversed()为倒序
CountDownLatch 类学习:
有任务ABC时,如果需要将AB都执行完成后,再执行C任务。而AB任务又是可以并发执行的。那么可以使用CountDownLatch类来控制执行C的时机。
初始化一个CountDownLatch 实例时,必须指定一个int类型的数值。
CountDownLatch cdl=new CountDownLatch(2);
当A任务执行完时,进行cdl.countDown()方法。将值减1。
当B任务执行完时,进行cdl.countDown()方法。将值 减1。
在执行C任务之前,加上cdl.await()方法。任务将一起阻塞,一直循环判断cdl的值是否为0。
如果为0则开始执行c任务。这里也可以设定等待的时间。
countDownLatch.await(30, TimeUnit.SECONDS);
如果在指定时间内,AB任务都没有完成。则C任务继续执行。
代码及执行结果如下:
@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