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