Edited at

Java並行・並列・非同期処理チートシート

More than 1 year has passed since last update.


スレッド制御

クラス / インタフェース / メソッド
概要
Since

java.lang.Thread
明示的なスレッド制御
1.0

java.lang.Runnable
非同期タスク
1.0

java.lang.Thread#sleep
スレッド休眠処理
1.0

java.lang.Thread#yield
スレッド一時休眠のヒント
1.0

java.lang.Thread#onSpinWait
Spin-Waitループのヒント
1.9

Java 1.5以降では Executorsフレームワーク 利用を優先検討のこと。


遅延実行(タイマー)

クラス / メソッド
概要
Since

java.util.TimerTask
遅延実行タスク
1.3

java.util.Timer#schedule
遅延タスクの実行予約
1.3

java.util.Timer#scheduleAtFixedRate
遅延タスクの周期実行予約
1.3

Java 1.5以降では Executorsフレームワーク 利用を優先検討のこと。


モニター同期

メソッド / 構文
概要
Since

java.lang.Object#wait
モニター待機
1.0

java.lang.Object#notify
モニター通知/Signal
1.0

java.lang.Object#notifyAll
モニター通知/Broadcast
1.0

synchronizedブロック構文
スコープベースのモニターロック
1.0

モニター待機/通知処理の代わりに、Java 1.5以降では java.util.concurrentパッケージ (以下j.u.c表記)利用を優先検討のこと。


スレッドセーフ・コンテナ

メソッド
概要
Since

java.util.Vector
スレッドセーフ可変長配列
1.0

java.util.Collections#synchronizedCollection
スレッドセーフCollectionへの変換
1.2

java.util.Collections#synchronizedList
スレッドセーフListへの変換
1.2

java.util.Collections#synchronizedSet
スレッドセーフSetへの変換
1.2

java.util.Collections#synchronizedMap
スレッドセーフMapへの変換
1.2

java.util.Collections#synchronizedSortedSet
スレッドセーフSortedSetへの変換
1.2

java.util.Collections#synchronizedSortedMap
スレッドセーフSortedMapへの変換
1.2

java.util.Collections#synchronizedNavigableSet
スレッドセーフNavigableSetへの変換
1.8

java.util.Collections#synchronizedNavigableMap
スレッドセーフNavigableMapへの変換
1.8

java.util.Collections#synchronizedXxxメソッドは、モニターロック実装によるスレッドセーフ・コンテナのインスタンスを返す。


並行コンテナ

クラス
概要
Since

j.u.c.ConcurrentLinkedQueue
FIFO, ノンブロック/任意上限
1.5

j.u.c.ArrayBlockingQueue
FIFO, ブロッキング/上限付き
1.5

j.u.c.LinkedBlockingQueue
FIFO, ブロッキング/任意上限
1.5

j.u.c.DelayQueue
FIFO, ブロッキング/上限なし/遅延指定
1.5

j.u.c.PriorityBlockingQueue
優先度付きFIFO, ブロッキング/上限なし
1.5

j.u.c.LinkedBlockingDeque
LIFO, ブロッキング/任意上限
1.6

j.u.c.LinkedTransferQueue
FIFO, 同期転送 or ノンブロック/上限なし
1.7

j.u.c.ConcurrentHashMap
並行ハッシュテーブル実装によるMap
1.5

j.u.c.ConcurrentSkipListMap
並行スキップリスト実装によるスレッドセーフMap
1.6

j.u.c.ConcurrentSkipListSet
並行スキップリスト実装によるスレッドセーフSet
1.6

j.u.c.CopyOnWriteArrayList
Copy-on-Write実装によるスレッドセーフList
1.6

j.u.c.CopyOnWriteArraySet
Copy-on-Write実装によるスレッドセーフSet
1.6


同期プリミティブ

クラス / インタフェース

概要
Since

j.u.c.Semaphore
カウンティング・セマフォ
1.5

j.u.c.locks.Lock
ロック操作インタフェース
1.5

j.u.c.locks.Condition
Lockから取得する条件変数
1.5

j.u.c.locks.ReentrantLock
排他制御(ミューテックス)
1.5

j.u.c.locks.ReentrantReadWriteLock
共有/排他ロック(Reader-Writerロック)
1.5

j.u.c.locks.StampedLock
楽観的Read操作+共有/排他ロック
1.8

j.u.c.SynchronousQueue<E>
単一値の同期転送
1.5

j.u.c.Exchanger<V>
2スレッド間の同期値交換
1.5

j.u.c.CountDownLatch
複数スレッド到達まで同期待機
1.5

j.u.c.CyclicBarrier
同期バリア(ランデブー・ポイント)
1.5

j.u.c.Phaser
フェーズ同期機構
1.7


低レイヤ同期プリミティブ

クラス
概要
Since

j.u.c.locks.LockSupport
ロック機構実装用の低レイヤ同期プリミティブ
1.5

j.u.c.locks.AbstractQueuedSynchronizer
ロック機構実装用の低レイヤ同期プリミティブ
1.5

j.u.c.locks.AbstractQueuedLongSynchronizer
ロック機構実装用の低レイヤ同期プリミティブ
1.6

j.u.c.locks.AbstractOwnableSynchronizer
ロック機構実装用の低レイヤ同期プリミティブ
1.6


アトミック変数

構文 / クラス
概要
Since

volatileフィールド
(部分的な)アトミック変数
1.0

j.u.c.atomic.AtomicBoolean
boolean型アトミック変数
1.5

j.u.c.atomic.AtomicInteger
int型アトミック変数
1.5

j.u.c.atomic.AtomicLong
long型アトミック変数
1.5

j.u.c.atomic.AtomicReference<V>
参照型アトミック変数
1.5

j.u.c.atomic.AtomicMarkableReference<V>
{参照型,マークビット}ペア アトミック変数
1.5

j.u.c.atomic.AtomicStampedReference<V>
{参照型,スタンプ値}ペア アトミック変数
1.5

j.u.c.atomic.AtomicIntegerArray
int型配列アトミック変数
1.5

j.u.c.atomic.AtomicLongArray
long型配列アトミック変数
1.5

j.u.c.atomic.AtomicReference<E>
参照型配列アトミック変数
1.5

j.u.c.atomic.AtomicIntegerFieldUpdater<T>
int型フィールドTアトミック更新操作
1.5

j.u.c.atomic.AtomicLongFieldUpdater<T>
long型フィールドTアトミック更新操作
1.5

j.u.c.atomic.AtomicReferenceFieldUpdater<T,V>
参照型フィールドTアトミック更新操作
1.5

j.u.c.atomic.LongAdder
long型アトミック加算操作
1.8

j.u.c.atomic.DoubleAdder
double型アトミック加算操作
1.8

j.u.c.atomic.LongAccumulator
long型アトミックア2項演算操作
1.8

j.u.c.atomic.DoubleAccumulator
double型アトミック2項演算操作
1.8


低レイヤメモリアクセス操作

クラス
概要
Since

java.lang.invoke.VarHandle
アトミック処理実装用のメモリアクセス操作
1.9


スレッドローカル変数

クラス
概要
Since

java.lang.ThreadLocal<T>
スレッドローカル変数
1.2

java.lang.InheritableThreadLocal<T>
子スレッドへ値継承するスレッドローカル変数
1.2


Executorsフレームワーク

クラス / インタフェース / メソッド
概要
Since

java.lang.Runnable
戻り値なし非同期タスク
1.0

j.u.c.Callable<T>
戻り値Tの非同期タスク
1.5

j.u.c.FutureTask<T>
戻り値Tの取消可能な非同期タスク
1.5

j.u.c.Future<T>
非同期タスクの結果T
1.5

j.u.c.ExecutorService
タスク実行サービス操作インタフェース
1.5

j.u.c.Executor#execute
非同期タスク(Runnable)の実行
1.5

j.u.c.ExecutorService#submit
非同期タスクの実行とFutrue<T>取得
1.5

j.u.c.ExecutorService#shutdown
タスク実行サービス 受付停止要求
1.5

j.u.c.ExecutorService#shutdownNow
タスク実行サービス 即時停止要求
1.5

j.u.c.ExecutorService#awaitTermination
タスク実行サービス 完了待機
1.5

j.u.c.Executors#newSingleThreadExecutor
シングルスレッド実装ExecutorServiceを作成
1.5

j.u.c.Executors#newFixedThreadPool
固定スレッド数のスレッドプール実装ExecutorServiceを作成
1.5

j.u.c.Executors#newCachedThreadPool
動的スレッド数のスレッドプール実装ExecutorServiceを作成
1.5

j.u.c.Executors#newWorkStealingPool
Work-Stealスレッドプール実装ExecutorServiceを作成
1.8

j.u.c.ScheduledExecutorService
開始遅延/周期タスク実行サービス操作インタフェース
1.5

j.u.c.ScheduledExecutorService#schedule
非同期タスクの遅延実行
1.5

j.u.c.ScheduledExecutorService#scheduleAtFixedRate
非同期タスク(Runnable)の周期実行
1.5

j.u.c.ScheduledExecutorService#scheduleWithFixedDelay
非同期タスク(Runnable)の周期実行
1.5

j.u.c.Executors#newSingleThreadScheduledExecutor
シングルスレッド実装ScheduledExecutorServiceを作成
1.5

j.u.c.Executors#newScheduledThreadPool
スレッドプール実装ScheduledExecutorServiceを作成
1.5

j.u.c.ExecutorCompletionService<V>
非同期タスクの完了順取得
1.5


Fork/Joinフレームワーク

クラス / メソッド
概要
Since

j.u.c.ForkJoinTask<V>
Fork/Join抽象タスク
1.7

j.u.c.RecursiveAction
戻り値なしFork/Joinタスク
1.7

j.u.c.RecursiveTask<V>
戻り値V型のFork/Joinタスク
1.7

j.u.c.CountedCompleter<V>
完了時処理指定つきFork/Joinタスク
1.8

j.u.c.ForkJoinPool
Fork/Joinタスク実行ExecutorService
1.7

j.u.c.ForkJoinPool#execute
戻り値なしFork/Joinタスク実行
1.7

j.u.c.ForkJoinPool#invoke
Fork/Joinタスク実行と戻り値取得
1.7

j.u.c.ForkJoinPool#submit
Fork/Joinタスク投入
1.7

j.u.c.ForkJoinWorkerThread
Fork/Join実行ワーカスレッド
1.7


CompletableFuture API

クラス / インタフェース / メソッド
概要
Since

j.u.c.CompletionStage<T>
非同期計算ステージ(継続)インタフェース
1.8

j.u.c.CompletableFuture<T>
継続可能な非同期タスク
1.8

j.u.c.CompletableFutureクラスの非同期処理はExecutorsフレームワークまたはFork/Joinフレームワーク上で動作する。


Stream API

メソッド
概要
Since

java.util.stream.BaseStream#parallel
並列ストリームへの変換
1.8

java.util.Collection#parallelStream
コレクション要素の並列ストリーム取得
1.8

java.util.SplittableRandom
乱数ストリームの生成
1.8

Stream API並列ストリーム処理はFork/Joinフレームワーク上に実装されている。ExecutorServiceとしてForkJoinPool.commonPool()が利用される。


Reactive Streams API

クラス / インタフェース

概要
Since

j.u.c.Flow.Publisher<T>
Publisherインタフェース
1.9

j.u.c.Flow.Subscriber<T>
Subscriberインタフェース
1.9

j.u.c.Flow.Processor<T,R>
Processorインタフェース
1.9

j.u.c.Flow.Subscription
Subscriptionインタフェース
1.9

j.u.c.SubmissionPublisher<T>
Publisher実装
1.9

アプリケーション実装者向けではなく、Reactive Streamsフレームワーク実装者用の共通基盤API


非同期I/O(NIO.2)

クラス / インタフェース

概要
Since

j.u.c.Future<T>
非同期I/O要求の結果
1.5

java.nio.channels.CompletionHandler<V,A>
非同期I/Oの完了ハンドラ
1.7

java.nio.channels.AsynchronousFileChannel
非同期ファイルI/O
1.7

java.nio.channels.AsynchronousServerSocketChannel
非同期サーバソケット
1.7

java.nio.channels.AsynchronousSocketChannel
非同期ソケット
1.7

java.nio.channels.AsynchronousChannelGroup
非同期チャネルのグループ化
1.7


外部プロセス

クラス / メソッド
概要
Since

java.lang.Runtime#exec
外部プロセス起動
1.0

java.lang.ProcessBuilder
外部プロセス起動
1.5

java.lang.Process#waitFor
外部プロセス終了待機
1.0

java.lang.Process#waitFor
タイムアウト付き外部プロセス終了待機
1.8

java.lang.Process#onExit
外部プロセス終了ハンドラ
1.9

java.lang.Process#getInputStream
外部プロセス/標準出力
1.0

java.lang.Process#getErrorStream
外部プロセス/エラー出力
1.0

java.lang.Process#getOutputStream
外部プロセス/標準入力
1.0


その他

クラス / メソッド
概要
Since

java.lang.StringBuffer
スレッドセーフな文字列連結
1.0

java.lang.StringBuilder
スレッドアンセーフな文字列連結
1.5

java.lang.Math#random
スレッドセーフな乱数生成処理
1.0

java.util.Random
スレッドセーフな乱数生成器
1.0

j.u.c.ThreadLocalRandom
スレッドローカル乱数生成器
1.7

java.util.Arrays#sort
配列の逐次ソート
1.2

java.util.Arrays#parallelSort
配列の並列ソート
1.8

java.util.Arrays#setAll
配列要素への逐次設定
1.8

java.util.Arrays#parallelSetAll
配列要素への並列設定
1.8

java.util.Arrays#parallelPrefix
並列プレフィックス・スキャン
1.8

スレッド間共有が不要ならStringBuilder, ThreadLocalRandomを優先利用する。

java.util.Arrays#parallelSort処理ではForkJoinPool.commonPool()が利用される。