亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java并發工具輔助類代碼實例

瀏覽:3日期:2022-09-02 17:26:53

java中的并發工具類

一:等待多線程完成的CountDownLatch

CountDownLatch允許一個或多個線程等待其他線程完成操作。

package com.fuzhulei;import java.util.concurrent.*;​/** * 減法計數器,主要是countDown(計數器1) 和 await(阻塞)方法,只有當計數器減為0的時候,當前線程才可以往下繼續執行。 * 主要用于允許一個或多個線程等待其他線程完成操作 * @author Huxudong * @createTime 2020-04-05 00:04:36 **/public class CountDownDemo { public static void main(String[] args) throws InterruptedException { /** 使用其構造函數,創建一個數值為6的計數器 */ CountDownLatch countDownLatch = new CountDownLatch(6); /** 自定義線程池使用 */ ExecutorService pool = new ThreadPoolExecutor(6, // 核心線程池大小9, // 最大線程池的大小(根據是IO密集型,還是CPU密集型來確定大?。?L, // 超時等待時間TimeUnit.SECONDS, // 時間的單位new LinkedBlockingQueue<>(5), // 阻塞隊列是哪一種Executors.defaultThreadFactory(), // 默認線程創建工廠new ThreadPoolExecutor.AbortPolicy() // 四大拒絕策略,選擇一種 ); try{ for (int i = 0; i < 6; i++) {/** 這個線程的提交,沒有返回值的任務 */pool.execute(()->{ countDownLatch.countDown(); System.out.println(Thread.currentThread().getName()+'執行一次減法');});​ } } catch(Exception e) { e.printStackTrace(); } finally { /** 關閉線程池 */ pool.shutdown(); }​ countDownLatch.await(); System.out.println('執行完成了');​ }}

正確執行結果:

Java并發工具輔助類代碼實例

但是如果我們設置計數器的容量大于6的話(相對于我的程序而言),就會被阻塞在那里

Java并發工具輔助類代碼實例

會發現執行完成了 沒有被打印出來,而且程序一直沒有停止,這個時候就是因為計數器沒有歸0,所以當前線程被阻塞,不能向下面繼續進行。

二:同步屏障CyclicBarrier

CyclicBarrier的翻譯大致就是可循環的屏障。它主要的作用就是讓一組線程到達一個屏障(也可以叫做同步點)時被阻塞,直到最后一份線程到達屏障時,屏障才會開門,所有被屏障攔截的線程才會繼續運行。

package com.fuzhulei;​import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;​/** * CyclicBarrier是一個加法計數器,即同步屏障,可循環的屏障,讓一組線程到達一個屏障(也可以叫做同步點)時被阻塞,直到最后一個線程到達屏障,達到了一開始初始化的屏障的數值, * 屏障才可以打開門,所有被攔截的線程才可以繼續工作,主要是通過調用await方法來實現的 * @author Huxudong * @createTime 2020-04-04 22:53:50 **/public class CyclicBarrierDemo { public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(3); new Thread(()->{​ try {cyclicBarrier.await(); } catch (InterruptedException e) {e.printStackTrace(); } catch (BrokenBarrierException e) {e.printStackTrace(); } System.out.println('線程A已經到達屏障'); },'A').start();​ new Thread(()->{ try {cyclicBarrier.await(); } catch (InterruptedException e) {e.printStackTrace(); } catch (BrokenBarrierException e) {e.printStackTrace(); } System.out.println('線程B已經到達屏障'); },'B').start();​ new Thread(()->{ try {cyclicBarrier.await(); } catch (InterruptedException e) {e.printStackTrace(); } catch (BrokenBarrierException e) {e.printStackTrace(); } System.out.println('線程C已經到達屏障'); },'C').start();​​ }}

執行的結果如下:

Java并發工具輔助類代碼實例

但是如果把定義的容量大于3(相對于我的程序而言),就會發現什么都不會輸出了,看截圖

Java并發工具輔助類代碼實例

并且程序一直還沒有停止,這就是屏障起到了作用,因為屏障要求至少需要4個(假設),但是此時只有三個線程到達,所以不滿足,屏障就一直阻攔不放路,那么所有的線程也就被阻塞不能向下面繼續運行,除非知道第四個過來,滿足條件才會運行。

三:控制并發線程數的Semaphore

用來控制同時訪問特定資源的線程數量,通過協調各個線程,以保證合理的使用公用的資源。

package com.fuzhulei;​import java.util.concurrent.*;​/** * 用來控制同時訪問特定資源的線程數量,通過協調各個線程,以保證合理的使用公用的資源 * @author Huxudong * @createTime 2020-04-04 23:45:29 **/public class SemaphoreDemo { public static void main(String[] args) { Semaphore semaphore = new Semaphore(5); ExecutorService pool = new ThreadPoolExecutor(10,20,3L,TimeUnit.SECONDS,new LinkedBlockingQueue<>(20),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());​ try{ for (int i = 0; i < 60; i++) {pool.execute(() ->{ try { semaphore.acquire(); System.out.println(Thread.currentThread().getName()+'限流成功'); semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); }}); } } catch(Exception e) { e.printStackTrace(); } finally { pool.shutdown(); } }}

執行的結果如下:

Java并發工具輔助類代碼實例

例如:數據庫資源,假如需要讀取幾十萬個數據的文件,因為都是IO密集型任務,所以開了2倍的處理器+1個線程數(IO密集型,所以線程可以多一些,讓cpu忙起來,因為IO操作的時候,很少操作Cpu)

但是如果讀到內存后,還需要存儲到數據庫中,但是數據庫連接我們設置的加入就10個,所以我們必須控制只有10個線程可以同時訪問數據庫連接保存數據,否則會報錯無法連接數據庫異常。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 欧美大片a一级毛片视频 | 91久久综合九色综合欧美亚洲 | 国产91精品久久久久久 | 91香蕉视频色 | 99久久香蕉| 国产婷婷一区二区在线观看 | 国产精品久久在线观看 | 日韩中文视频 | 久久久久久久97 | 国产免费自拍视频 | 国产国语一级毛片 | 久久99精品久久久 | 日本xxx免费视频 | 亚洲精品丝袜在线一区波多野结衣 | 国产成人一区在线播放 | 亚洲国产日韩在线成人蜜芽 | 日本一本色道免费视频 | 国产成人精品影视 | 农村女人的一级毛片 | 91久久国产精品 | 免费国产h视频在线观看86 | 97婷婷色 | 日韩黄毛片 | 国产理论最新国产精品视频 | 日日噜噜噜夜夜爽爽狠狠 | 日本无卡αv免费视频 | 国产一区二区福利 | 国产成人精品免费 | 男女做www免费高清视频 | 美女吊黑视频在线观看 | 亚洲一区二区黄色 | 麻豆视频在线观看免费网站 | 日韩欧美亚洲综合一区二区 | 超91精品手机国产在线 | 免费看成人国产一区二区三区 | 在线高清性色生活片免费观看 | 国产亚洲精品国产 | 国产亚洲精品xxx | 国产一级在线现免费观看 | 成人影院欧美大片免费看 | 国产人成激情视频在线观看 |