Oracle官方併發教程之併發隨機數
在JDK7中,java.util.concurrent包含了一個相當便利的類,ThreadLocalRandom,當應用程式期望在多個執行緒或ForkJoinTasks中使用隨機數時。
對於併發訪問,使用TheadLocalRandom代替Math.random()可以減少競爭,從而獲得更好的效能。
你只需呼叫ThreadLocalRandom.current(), 然後呼叫它的其中一個方法去獲取一個隨機數即可。下面是一個例子:
int r = ThreadLocalRandom.current().nextInt(4,77);
相關推薦
Oracle官方併發教程之併發隨機數
原文地址 譯文地址 譯者:李任 校對:方騰飛 在JDK7中,java.util.concurrent包含了一個相當便利的類,ThreadLocalRandom,當應用程式期望在多個執行緒或ForkJoinTasks中使用隨機數時。 對於併發訪問,使用TheadLocalRandom代替Math
Oracle官方併發教程之併發集合
原文地址 譯文地址 譯者:李任 校對:方騰飛 java.util.concurrent包囊括了Java集合框架的一些附加類。它們也最容易按照集合類所提供的介面來進行分類: BlockingQueue定義了一個先進先出的資料結構,當你嘗試往滿佇列中新增元素,或者從空佇列中獲取元素時,將會阻
Oracle官方併發教程之活躍度
原文地址,譯文地址,譯者:李任,鄭旭東 校對:蘑菇街-小寶 一個併發應用程式能及時執行的能力稱為活躍性。本節將介紹最常見的活躍性問題:死鎖(deadlock),以及另外兩個活躍性問題:飢餓(starvation)和活鎖(livelock)。 死鎖 原文地址 死鎖描述了這樣一種情景,兩個或多個
Oracle官方併發教程之執行緒物件
原文連結,譯文連結,譯者:鄭旭東 在Java中,每個執行緒都是Thread類的例項。併發應用中一般有兩種不同的執行緒建立策略。 直接控制執行緒的建立和管理,每當應用程式需要執行一個非同步任務的時候就為其建立一個執行緒 將執行緒的管理從應用程式中抽象出來作為執行器,應用程式將任務傳遞給執行器,
Oracle官方併發教程之原子變數
原文地址,譯文地址 ,譯者:李任,校對:鄭旭東 java.util.concurrent.atomic包定義了對單一變數進行原子操作的類。所有的類都提供了get和set方法,可以使用它們像讀寫volatile變數一樣讀寫原子類。就是說,同一變數上的一個set操作對於任意後續的get操作存在ha
Oracle官方併發教程之高階併發物件
原文地址,譯文地址 譯者:李任 目前為止,該教程重點講述了最初作為Java平臺一部分的低級別API。這些API對於非常基本的任務來說已經足夠,但是對於更高階的任務就需要更高階的API。特別是針對充分利用了當今多處理器和多核系統的大規模併發應用程式。 本節,我們將著眼於Java 5.0新增的一
Oracle官方併發教程之執行器(Executors)
原文連結,譯文連結,譯者:Greenster,校對:鄭旭東 在之前所有的例子中,Thread物件表示的執行緒和Runnable物件表示的執行緒所執行的任務之間是緊耦合的。這對於小型應用程式來說沒問題,但對於大規模併發應用來說,合理的做法是將執行緒的建立與管理和程式的其他部分分離開。封裝這些功能
Oracle官方併發教程之執行緒池
原文連結,譯文連結,譯者:Greenster,校對:鄭旭東 在java.util.concurrent包中多數的執行器實現都使用了由工作執行緒組成的執行緒池,工作執行緒獨立於所它所執行的Runnable任務和Callable任務,並且常用來執行多個任務。 使用工作執行緒可以使建立執行緒的開銷最
Oracle官方併發教程之Executor介面
原文連結,譯文連結,譯者:Greenster,校對:鄭旭東 java.util.concurrent中包括三個Executor介面: Executor,一個執行新任務的簡單介面。 ExecutorService,擴充套件了Executor介面。添加了一些用來管理執行器生命週期和任務生命週期的
Oracle官方併發教程之鎖物件
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import java.util.Random; public class Safelock { static
Oracle官方併發教程之中斷
原文連結,譯文連結,譯者: 蘑菇街-小寶 校對:樑海艦 中斷是給執行緒的一個指示,告訴它應該停止正在做的事並去做其他事情。一個執行緒究竟要怎麼響應中斷請求取決於程式設計師,不過讓其終止是很普遍的做法。這是本文重點強調的用法。 一個執行緒通過呼叫對被中斷執行緒的Thread物件的inter
Oracle官方併發教程之Guarded Blocks
原文連線,譯文連線,譯者:Greester,校對:鄭旭東 多執行緒之間經常需要協同工作,最常見的方式是使用Guarded Blocks,它迴圈檢查一個條件(通常初始值為true),直到條件發生變化才跳出迴圈繼續執行。在使用Guarded Blocks時有以下幾個步驟需要注意: 假設guarde
Oracle官方併發教程之不可變物件
原文連結,譯文連結,譯者:Greenster,校對:鄭旭東 一個物件如果在建立後不能被修改,那麼就稱為不可變物件。在併發程式設計中,一種被普遍認可的原則就是:儘可能的使用不可變物件來建立簡單、可靠的程式碼。 在併發程式設計中,不可變物件特別有用。由於建立後不能被修改,所以不會出現由於執行緒干擾
Oracle官方併發教程之同步
原文連結,譯文連結,譯者:蘑菇街-小寶,Greenster,李任 校對:丁一,鄭旭東,李任 執行緒間的通訊主要是通過共享域和引用相同的物件。這種通訊方式非常高效,不過可能會引發兩種錯誤:執行緒干擾和記憶體一致性錯誤。防止這些錯誤發生的方法是同步。 不過,同步會引起執行緒競爭,當兩個或多個執
Oracle官方併發教程之不可變物件(定義不可變物件的策略)
原文連結,譯文連結,譯者:Greenster,校對:鄭旭東 以下的一些規則是建立不可變物件的簡單策略。並非所有不可變類都完全遵守這些規則,不過這不是編寫這些類的程式設計師們粗心大意造成的,很可能的是他們有充分的理由確保這些物件在建立後不會被修改。但這需要非常複雜細緻的分析,並不適用於初學者。
Oracle官方併發教程之程序和執行緒
原文連結,譯文連結,譯者:bjsuo,校對:鄭旭東 在併發程式設計中,有兩個基本的執行單元:程序和執行緒。在java語言中,併發程式設計最關心的是執行緒,然而,程序也是非常重要的。 即使在只有單一的執行核心的計算機系統中,也有許多活動的程序和執行緒。因此,在任何給定的時刻,只有一個執行緒在實
Java8 併發教程之Thread與Executors
本教程共分為三個部分 原文地址 第一部分:執行緒(Thread)與執行體(Executors) 第三部分:原子變數與ConcurrentMap 歡迎瀏覽Java8併發教程的第一部分.本教程致力於使用簡單而易於理解的程式碼例項來教授你關於
二十七、併發程式設計之併發工具類CountDownLatch詳解
在JDK的併發包裡(java.util.concurrent)提供了這樣幾個非常有用的併發工具類來解決併發程式設計的流程控制。分別是CountDownLatch、CyclicBarrier和Semaphore。 1、CountDownLatch是什麼? CountDownLatch類
二十九、併發程式設計之併發工具類Semaphore詳解
一、簡介 Semaphore是一個計數訊號量,常用於限制可以訪問某些資源(物理或邏輯的)執行緒數目。 Semaphore是計數訊號量。Semaphore管理一系列許可證。每個acquire方法阻塞,直到有一個許可證可以獲得然後拿走一個許可證;每個release方法增加一個許可證,這可能會
二十八、併發程式設計之併發工具類CyclicBarrier詳解
一、概述 CyclicBarrier是一個同步工具類,它允許一組執行緒互相等待,直到到達某個公共屏障點。與CountDownLatch不同的是該barrier在釋放等待執行緒後可以重用,所以稱它為迴圈(Cyclic)的屏障(Barrier)。 CyclicBarrier支援一個可選的Ru