java barrier_Java并發類CyclicBarrier方法詳解

Cyclic是周期的意思,Barrier是關卡的意思。CyclicBarrier不僅有CountDownLatch的功能,還可以實現屏障等待,即階段性同步。因此適用于,需要循環地實現線程一起做任務的目標。

CyclicBarrier允許一組線程相互等待,直到到達某個公共屏障點,如果某些進程需要實時地相互等待,就可以使用CyclicBarrier。CyclicBarrier的重點在于,任何一個線程沒有完成任務,其他所有的線程都必須等待,即,同類相互等待。

CyclicBarrier的計數是加法操作。

new CyclicBarrier(5, new

Runnable(){})設置最大為5個同行者,當線程個數等于同行者數目時,即只有5個線程,則5個線程都執行了cbRef的await()方法后,才會走到run()方法內,然后每個方法再各自繼續執行。否則這些線程彼此相互等待,一直阻塞。

當線程個數大于partier(同行者)數量時,湊齊同行者數量個線程的await后,就會走到run方法內,湊齊的方法也會各自繼續執行。之后再次湊齊,會再執行一遍run方法,各自繼續執行。從而實現分批進行。當循環執行時,到達屏障點一同執行的線程組合是可能是隨機的。

CyclicBarrier具有屏障重置性。?當湊齊同行者數目后,使用getNumberWaiting()方法可以看到,等待數量變為0.再來一個同行者,等待數目就會變成n-1。

isBroken()方法查詢此屏障是否處于損壞狀態。?如果其中一個進程因為出現異常而中斷,不會影響其他進程的執行和等待,但是,如果用Thread的interrupt()方法進行中斷,則所有的線程都會拋出BrokenBarrierException異常。也就是說,CyclicBarrier類對現成的中斷處理,會使用全有、或者全無的破壞模型。即,有一個線程因為超時或中斷提前離開了屏障點,其他所有在屏障點等待的線程也會拋出異常并離開屏障點。

?await(long timeout,

TimeUnit unit)如果在指定時間內達到parties的數量則繼續運行,否則拋出超時異常。

getParties()屏障對象的parties個數。

??getNumberWaiting()在屏障處等待的線程個數。

reset()重置屏障。屏障被重置后,如果有線程在等待parties,會出現Broken異常。?

示例代碼https://github.com/whitefancy/OJproblems/tree/master/javaconcurrent/cyclicbarrier

參考文檔

《Java并發編程

核心方法與框架》(高洪巖)??

??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287562.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ArcGIS風暴】實驗:公路建設成本的計算

實驗平臺:ArcGIS 9.3實驗目的:學習和掌握公路建設成本的計算方法實驗要求:熟練掌握如何生成通行成本層、計算成本距離,并學會計算最佳路徑,且對成本距離與直線距離進行比較。實驗數據:ArcEx7實驗步驟:生成通行成本層1.打開Arcmap,加載數據ArcEX7,如圖 2.執行spatial …

[leetcode]347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2,2,3] and k 2, return [1,2]. Note: You may assume k is always valid, 1 ≤ k ≤ number of unique elements.Your algorithms time complexity must be better th…

合并Spark社區代碼的正確姿勢

原創文章,轉載請保留出處 最近剛剛忙完Spark 2.2.0的性能測試及Bug修復,社區又要發布2.1.2了,國慶期間剛好有空,過了一遍2.1.2的相關JIRA,發現有不少重要修復2.2.0也能用上,接下來需要將有用的PR合到我們內…

.NET 中 GC 的模式與風格

垃圾回收(GC)是托管語言必備的技術之一。GC 的性能是影響托管語言性能的關鍵。我們的 .NET 既能寫桌面程序 (WINFROM , WPF) 又能寫 web 程序 (ASP.NET CORE),甚至還能寫移動端程序。。。不同使用場景的程序對 GC 的風格也有不同的要求&#…

(轉)java中的 | ^ 分別是什么?

|是按位或 ^是按位抑或 &是按位與比如有兩個數 int x 5;int y 11;System.out.println(x|y);System.out.println(x&y);System.out.println(x^y);結果是15, 1 ,14 過程 x5 (0101二進制) y11(1011二進制) x|y 1111 15 x&y 0001 1 x…

[python opencv 計算機視覺零基礎到實戰] 七、邏輯運算與應用

一、學習目標 了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python opencv 計算機…

Android之如何判斷當前是阿拉伯布局的方法

1 問題 判斷當前是不是阿拉伯布局的方法 2 幾種判斷方法 @SuppressLint("NewApi")public static boolean isLayoutRtl(View view, Resources res) {if (res == null || view == null) return false;Locale curLocale = res.getConfiguration().locale;//如果當前語言…

【ArcGIS風暴】數字化實驗:數據采集與編輯完整操作流程

一.實驗平臺:ArcGIS 9.3 二.實驗目的:對甘肅省的十四個地級市進行圖像配準、數據采集。 三.實驗要求:掌握地理數據采集方法,圖像配準及坐標投影,選擇主要的點、線、面進行投影。 四.實驗數據:甘肅省統計數據,甘肅省行政區劃圖。 (一).影像配準 第一步:加載…

loadrunner java 參數化_LoadRunner 參數化詳解

LoadRunner,是一種預測系統行為和性能的負載測試工具。通過以模擬上千萬用戶實施并發負載及實時性能監測的方式來確認和查找問題,LoadRunner能夠對整個企業架構進行測試。通過使用 LoadRunner,企業能最大限度地縮短測試時間,優化性…

Android之實現RTL的ViewPager

1 問題 如何實現RTL的ViewPager,就是滑動方向和我們之前滑動的方向相反,比如一般,我們用ViewPager滑動4個圖片,依次順序是 1 2 3 4 ,我們在頁面1的時候,我們一般都是習慣向左滑動到2,現在需要實現手指向右滑動到2. 2 解決辦法 1)我們可以使用ViewPager2,這個是可以支…

Why Apache Spark is a Crossover Hit for Data Scientists [FWD]

Spark is a compelling multi-purpose platform for use cases that span investigative, as well as operational, analytics. Data science is a broad church. I am a data scientist — or so I’ve been told — but what I do is actually quite different from what oth…

Blazor University (21)使用 RenderFragments 模板化組件 —— 傳遞占位符

原文鏈接:https://blazor-university.com/templating-components-with-renderfragements/passing-placeholders-to-renderfragments/將占位符傳遞給 RenderFragments源代碼[1]說明:此頁面的靈感來自用戶 ?ister?agoo 的 Twitter 帖子。首先&#xff0c…

物聯網(車聯網)平臺架構方案

技術支持QQ:787728951、車載終端網關采用mina/nettyspring架構,獨立于其他應用,主要負責維護接入終端的tcp鏈接、上行以及下行消息的解碼、編碼、流量控制,黑白名單等安全控制,網關同時支持交通部JT/T808-2011、JT/T80…

[python opencv 計算機視覺零基礎到實戰] 八、ROI泛洪填充

一、學習目標 了解什么是ROI了解floodFill的使用方法 如有錯誤歡迎指出~ 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python opencv 計…

【經典回放】JavaScript學習詳細干貨筆記之(二)

【經典回放】JavaScript學習詳細干貨筆記之(一) 【經典回放】JavaScript學習詳細干貨筆記之(二) 【經典回放】JavaScript學習詳細干貨筆記之(三) 一、JavaScript 數組 JavaScript數組的定義、使用都是非常簡單的,從a17.htm就可以知道,僅僅定義的話,就使用: var …

java string類api_java基礎—String類型常用api

1、字符串比較equalsequalsIgnoreCase 忽略大小寫做比較2、字符串拆分(切片)splitString a "lemon:python:Java";//split切片之后的結果是一個一維字符串類型數組String[] arr a.split(":");for(int i 0 ;i System.out.println(arr[i]);}3、字符串截取…

解決沖突

人生不如意之事十之八九,合并分支往往也不是一帆風順的。 準備新的feature1分支,繼續我們的新分支開發: $ git checkout -b feature1 Switched to a new branch feature1修改readme.txt最后一行,改為: Creating a new …

Android之java.lang.OutOfMemoryError: Failed to allocate a ** byte allocation with **free bytes and 2M

1 問題 glide加載圖片出現oom java.lang.OutOfMemoryError: Failed to allocate a 23970828 byte allocation with 2097152 free bytes and 2MB until OOM 2 解決辦法 1) 簡單粗暴點的在AndroidManifest.xml添加如下,增大安卓虛擬機內存 android:largeHeap"…

HQL入門學習

2019獨角獸企業重金招聘Python工程師標準>>> package myHibernate; /** 測試簡單的HQL語句* 2010年4月9日 23:36:54* */ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti…

Oracle精簡客戶端配置

2019獨角獸企業重金招聘Python工程師標準>>> 由于Oracle client體積很大。而且安裝后,基本上就用2個功能:TNS配置服務名和SQL*Plus。下面是一種小巧、快捷的Oracle客戶端配置方法: 1.下載Instant Client 下載地址: htt…