Java騷操作之CountDownLatch代碼詳解
簡述
用來幹嘛的?當你在方法中調用瞭多個線程,對數據庫進行瞭一些不為人知的操作後,還有一個操作需要留到前者都執行完的重頭戲,就需要用到 CountDownLatch
瞭
實踐代碼
package com.github.gleans; import java.util.concurrent.CountDownLatch; public class TestCountDownLatch { public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3); new KeyPass(1000L, "thin jack", latch).start(); new KeyPass(2000L, "noral jack", latch).start(); new KeyPass(3000L, "fat jack", latch).start(); latch.await(); System.out.println("此處對數據庫進行最後的插入操作~"); } static class KeyPass extends Thread { private long times; private CountDownLatch countDownLatch; public KeyPass(long times, String name, CountDownLatch countDownLatch) { super(name); this.times = times; this.countDownLatch = countDownLatch; } @Override public void run() { try { System.out.println("操作人:" + Thread.currentThread().getName() + "對數據庫進行插入,持續時間:" + this.times / 1000 + "秒"); Thread.sleep(times); countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
圖解
使用await()提前結束操作
package com.github.gleans; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public class TestCountDownLatch { public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3); new KeyPass(2000L, "公司一", latch).start(); new KeyPass(3000L, "公司二", latch).start(); new KeyPass(5000L, "公司三", latch).start(); latch.await(2, TimeUnit.SECONDS); System.out.println("~~~賈總PPT巡演~~~~"); System.out.println("~~~~融資完成,撒花~~~~"); } static class KeyPass extends Thread { private long times; private CountDownLatch countDownLatch; public KeyPass(long times, String name, CountDownLatch countDownLatch) { super(name); this.times = times; this.countDownLatch = countDownLatch; } @Override public void run() { try { Thread.sleep(times); System.out.println("負責人:" + Thread.currentThread().getName() + "開始工作,持續時間:" + this.times / 1000 + "秒"); countDownLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
假設公司一、公司二、公司三各需要2s、3s、5s來完成工作,賈總等不瞭,隻能等2s,那麼就設置await的超時時間
latch.await(2, TimeUnit.SECONDS);
執行結果
負責人:公司一開始工作,持續時間:2秒
~~~賈總PPT巡演~~~~
~~~~融資完成,撒花~~~~
負責人:公司二開始工作,持續時間:3秒
負責人:公司三開始工作,持續時間:5秒
方法描述
總結
這個操作可以說是簡單好用
,目前還未遇見副作用
,若是有大佬,可以告知弟弟一下,提前表示感謝~
到此這篇關於Java騷操作之CountDownLatch的文章就介紹到這瞭,更多相關Java CountDownLatch內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java多線程同步工具類CountDownLatch詳解
- Java並發包工具類CountDownLatch的應用詳解
- java多線程CountDownLatch與線程池ThreadPoolExecutor/ExecutorService案例
- java並發包中CountDownLatch和線程池的使用詳解
- java多線程CyclicBarrier的使用案例,讓線程起步走