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

相關文章
相關標籤/搜索