1. 程式人生 > >java多執行緒中常用的執行緒幫助類

java多執行緒中常用的執行緒幫助類

java.util.concurrent
類 Exchanger<V>

java.lang.Object
  java.util.concurrent.Exchanger<V>
型別引數:
V - 可以交換的物件型別
public class Exchanger<V>
extends Object

可以在對中對元素進行配對和交換的執行緒的同步點。每個執行緒將條目上的某個方法呈現給 exchange 方法,與夥伴執行緒進行匹配,並且在返回時接收其夥伴的物件。Exchanger 可能被視為 SynchronousQueue 的雙向形式。Exchanger 可能在應用程式(比如遺傳演算法和管道設計)中很有用。

java.util.concurrent 類 Semaphore

java.lang.Object
  java.util.concurrent.Semaphore
public class Semaphore
extends Objectimplements Serializable

一個計數訊號量。從概念上講,訊號量維護了一個許可集。如有必要,在許可可用前會阻塞每一個 acquire(),然後再獲取該許可。每個 release() 新增一個許可,從而可能釋放一個正在阻塞的獲取者。但是,不使用實際的許可物件,Semaphore 只對可用許可的號碼進行計數,並採取相應的行動。

Semaphore 通常用於限制可以訪問某些資源(物理或邏輯的)的執行緒數目。

java.util.concurrent 類 ScheduledThreadPoolExecutor

public class ScheduledThreadPoolExecutor
extends ThreadPoolExecutorimplements ScheduledExecutorService

ThreadPoolExecutor,它可另行安排在給定的延遲後執行命令,或者定期執行命令。需要多個輔助執行緒時,或者要求 ThreadPoolExecutor 具有額外的靈活性或功能時,此類要優於 Timer

一旦啟用已延遲的任務就執行它,但是有關何時啟用,啟用後何時執行則沒有任何實時保證。按照提交的先進先出 (FIFO) 順序來啟用那些被安排在同一執行時間的任務。

雖然此類繼承自 ThreadPoolExecutor,但是幾個繼承的調整方法對此類並無作用。特別是,因為它作為一個使用 corePoolSize 執行緒和一個無界佇列的固定大小的池,所以調整 maximumPoolSize 沒有什麼效果。

擴充套件注意事項:此類重寫 AbstractExecutorServicesubmit 方法,以生成內部物件控制每個任務的延遲和排程。若要保留功能性,子類中任何進一步重寫的這些方法都必須呼叫超類版本,超類版本有效地禁用附加任務的定製。但是,此類提供替代受保護的擴充套件方法 decorateTask(為 RunnableCallable 各提供一種版本),可定製用於通過 executesubmitschedulescheduleAtFixedRate scheduleWithFixedDelay 進入的執行命令的具體任務型別。預設情況下,ScheduledThreadPoolExecutor 使用一個擴充套件 FutureTask 的任務型別。

java.util.concurrent 類 DelayQueue<E extends Delayed>

型別引數:
E - 此 collection 中所儲存元素的型別
public class DelayQueue<E extends Delayed>
extends AbstractQueue<E>implements BlockingQueue<E>

Delayed 元素的一個無界阻塞佇列,只有在延遲期滿時才能從中提取元素。該佇列的頭部 是延遲期滿後儲存時間最長的 Delayed 元素。如果延遲都還沒有期滿,則佇列沒有頭部,並且 poll 將返回 null。當一個元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一個小於等於 0 的值時,將發生到期。即使無法使用 takepoll 移除未到期的元素,也不會將這些元素作為正常元素對待。例如,size 方法同時返回到期和未到期元素的計數。此佇列不允許使用 null 元素。

java.util.concurrent 類 CyclicBarrier

java.lang.Object
  java.util.concurrent.CyclicBarrier
public class CyclicBarrier
extends Object

一個同步輔助類,它允許一組執行緒互相等待,直到到達某個公共屏障點 (common barrier point)。在涉及一組固定大小的執行緒的程式中,這些執行緒必須不時地互相等待,此時 CyclicBarrier 很有用。因為該 barrier 在釋放等待執行緒後可以重用,所以稱它為迴圈 的 barrier。

CyclicBarrier 支援一個可選的 Runnable 命令,在一組執行緒中的最後一個執行緒到達之後(但在釋放所有執行緒之前),該命令只在每個屏障點執行一次。若在繼續所有參與執行緒之前更新共享狀態,此屏障操作 很有用。 

java.util.concurrent 類 CountDownLatch

java.lang.Object
  java.util.concurrent.CountDownLatch
public class CountDownLatch
extends Object

一個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許一個或多個執行緒一直等待。

用給定的計數 初始化 CountDownLatch。由於呼叫了 countDown() 方法,所以在當前計數到達零之前,await 方法會一直受阻塞。之後,會釋放所有等待的執行緒,await 的所有後續呼叫都將立即返回。這種現象只出現一次——計數無法被重置。如果需要重置計數,請考慮使用 CyclicBarrier

CountDownLatch 是一個通用同步工具,它有很多用途。將計數 1 初始化的 CountDownLatch 用作一個簡單的開/關鎖存器,或入口:在通過呼叫 countDown() 的執行緒開啟入口前,所有呼叫 await 的執行緒都一直在入口處等待。用 N 初始化的 CountDownLatch 可以使一個執行緒在 N 個執行緒完成某項操作之前一直等待,或者使其在某項操作完成 N 次之前一直等待。

CountDownLatch 的一個有用特性是,它不要求呼叫 countDown 方法的執行緒等到計數到達零時才繼續,而在所有執行緒都能通過之前,它只是阻止任何執行緒繼續通過一個 await。  


相關推薦

java(二):工作常用到的工具

java 工具類 工作中大家要用到很多工具類,第三方的jar中有很多現成的工具類符合自己的項目需要,這個時候就不需要去重復造輪子了,從而節省了很多時間,大家可以利用這些時間去做其它重要的事情,如果沒有符合自己的工具類,這個時候就要寫自己的工具類了,下面列舉一些工作中常用的工具類。1、

java執行常用執行幫助

java.util.concurrent 類 Exchanger<V> java.lang.Object java.util.concurrent.Exchanger<V> 型別引數:V - 可以交換的物件型別public class Exc

JAVA執行之——常用執行

執行緒池 學習了執行緒池的基本原理後,可以理解執行緒池的型別控制,主要是通過中心池大小,和最大執行緒池大小,以及儲存工作任務的佇列決定。JDK中為我們封裝了常用的四種執行緒池。 在JDK幫助文件中,有如此一段話: “強烈建議程式設計師使用較為方便的Exec

java執行加入執行

加入執行緒  join()                join(int)  等待指定毫秒之後再繼續。理解 :暫停當前執行的執行緒,開始執行當前加入的執行緒,完畢後繼續執行暫停的執行緒。

C# 如何讓 執行每個執行間隔毫秒執行同一個方法

class Program { static int dur = 200; static string tm = ""; static void Main(string[] args) {

UncaughtExceptionHandler處理執行執行時異常

執行緒在執行單元中不允許丟擲checked異常,而且執行緒執行在自己的上下文中,派生它的執行緒無法直接獲得它執行中出現的異常資訊。對此,Java為我們提供了UncaughtExceptionHandler介面,當執行緒在執行過程中出現異常時,會回撥UncaughtExceptionHan

【Linux 執行常用執行函式複習《一》

1、pthread_create以及pthread_self函式 1 /************************************************************************* 2 > File Name: pthread1.c 3

【Linux 執行常用執行函式複習《三》

1、關於函式pthraed_join與函式pthraed_detach 在任何一個時間點上,執行緒是可結合的(joinable)或者是分離的(detached)。一個可結合的執行緒能夠被其他執行緒收回其資源和殺死。在被其他執行緒回收之前,它的儲存器資源(例如棧)是不釋放的( 執行緒獨享部分)。相反,一

執行呼叫執行的start()

public class Quest implements Runnable { int b = 100; public synchronized void m1() throws Exception { System.out.println("en

linux 下檢視某一程序的cpu使用率和這個執行各個執行的cpu使用率

在Ubuntu/CentOS等linux系統中, 在除錯程式過程中,有時需要檢視程式的CPU的使用率和程式的各個程序的使用率. 那麼首先需要獲取這個程序的PID: ps -ef|grep [process name] 然後檢視該程序的CPU: top -p [PID]

禁止在視窗介面執行進行執行同步或進行耗時的操作。。。

最近工作時,經常碰到窗口出現未響應的現象,後面發現原因是這樣的: 1、使用者點選XX按鈕時,在XX按鈕事件中呼叫了aa.dll中的介面XXXAPI_TEST(); 2、aa.dll中的介面XXXAPI_TEST()內部有進行執行緒同步的操作。 3、因為執行緒同步的原因,導致

在子執行建立執行的方法

 與在主執行緒建立子執行緒的方法是一樣的重慶郵電學院計算機系綜合微機室馬英傑----Windows95是Microsoft公司的第一個真正的多工作業系統。在每一時刻可以有多個程序同時工作,而每一個程序又包含有多個執行緒。但只有一個處理器的計算機不可能真正地“同時”執行多個執行

Java 基礎:繼承執行順序

類的方法 主程 rgs 這一 over print 類繼承 方法 www. 1.單獨的父類測試 Java中,new一個類的對象,類裏面的靜態代碼塊、非靜態代碼、無參構造方法、有參構造方法、類的一般方法等部分, 它們的執行順序相對來說比較簡單,用程序也很容易驗證。 比如

滲透之——作業系統支援的管道符(在命令執行漏洞常用)

轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/85919481 在滲透過程中,有些系統或程式存在命令執行漏洞,那麼這時我們就可以依照作業系統支援的管道符來執行我們新增的一些系統命令,這裡,就Windows和Linux支援的

java型的理解(執行型)

說道多型,一定離不開其它兩大特性:封裝和繼承。而多型是在它們的基礎之上表現而來的,息息相關。在記憶中,每一次學習面向物件的時候,都與這三大特性有扯不開的關係,其是面向物件的重點,當然也算是難點。但是,它們就像是一層窗戶紙,只要有一個縫隙,你就完全可以搞懂什麼是面向物件。下面來

java 線程的鎖的類別及使用

ron 靜態方法 log 代碼 targe 對象實例 javase 依賴 監視器 目前在Java中存在兩種鎖機制: synchronized Lock Lock接口及其實現類是JDK5增加的內容,其作者是大名鼎鼎的並發專家Doug Lea。 數據同步需要依賴鎖,那鎖的

Java 線程的任務分解機制-ForkJoinPool

href int 線程 log lan 任務 join intern future http://blog.dyngr.com/blog/2016/09/15/java-forkjoinpool-internals/ http://colobu.c

Java線程Thread常用方法

HR 設置 inter ack AR trac dex exception trace getName():獲取此線程的名字 setName():設置此線程的名字 currentThread():靜態的,調取當前的線程 run():子線程要執行的代碼放入run()方法中

java線程的死鎖情況讀書筆記

bubuko 實例 syn 釋放 splay inf info sys 資源 多線程中的死鎖 在前面的分析中,我們知道一個對象可以用Synchronized方法或者其他的加鎖形式來防止別的任務在互斥還沒有釋放的時候就訪問這個對象。 試想一下這樣的情況:某個任務在等待另一個任

Java線程static變量的使用

target 生產 包括 abi 實現 分享圖片 非靜態方法 加載 aid 線程,是我們項目中繞不過的重點領域。提到線程,就常會聽到線程安全的術語。那什麽是線程安全呢?通俗點說,就是線程訪問時不產生資源沖突。其實,這是一個有點難以定義的概念,不是很容易讓人一聽就懂的概念。“