Javaのスレッド同期:ReentrantLockとsynchronizedキーワードの実装
第14章 コンカレンシー
スレッド同期
マルチスレッド環境における実行の不確定性問題を解決するため、スレッド同期メカニズムが導入されます。これにより、あるスレッドが特定のメソッドを使用中は、他のスレッドは待機状態になります。
Javaでマルチスレッド同期問題を解決する方法は主に2つあります:
Java SE 5.0で導入されたReentrantLockクラス
共有メモリのクラ ...
6月27日 21:56 投稿
CountDownLatchによるスレッド間の同期制御
複数の非同期タスクがすべて終了した後で次の処理を開始したい場合、CountDownLatchを使うと簡潔に記述できる。内部的には「残りタスク数」を管理するカウンタを持ち、各タスクは完了時にcountDown()でカウンタをデクリメントし、待機側はawait()でカウンタがゼロになるまでブロックされる。
主要APIの概要
コンストラクタ
CountDownLatch latch = new CountDownLatch(並 ...
6月16日 19:15 投稿
Javaにおけるマルチスレッディングと同期制御、スレッドプールの実践
マルチスレッドの実装方法
Javaでは複数のスレッドを生成して並列処理を行うことができます。主な実装パターンは以下の3つです。
1. Threadクラスの継承
カスタムスレッドクラスを作成し、Threadクラスを拡張する方法です。最もシンプルなアプローチです。
class WorkerThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; ...
5月31日 08:34 投稿
iOSにおけるスレッド同期とロックメカニズム
セマフォ:dispatch_semaphore_t
ミューテックス:pthread_mutex、@ synchronized、NSLock
条件付きロック:NSConditionLock、NSCondition
再帰ロック:NSRecursiveLock
スピンロック:OSSpinLock(非推奨、優先度逆転によるデッドロックの問題が発生)
リードライトロック:atomic(iOS10以降はos_unfair_lockで実装)
スピンロックとミューテックスの違い
スピンロックは ...
5月24日 09:18 投稿
JavaにおけるReentrantLockの活用方法
ReentrantLockとは
Javaでは、複数スレッドが共有リソースに安全にアクセスできるようにするために、いくつかの同期メカニズムが提供されています。その中でも、ReentrantLockは柔軟で強力なロック機構として知られています。本記事では、ReentrantLockの基本的な使い方、synchronizedとの比較、条件変数の利用方法、およびフェアロックとノンフェアロックの違いについて詳 ...
5月15日 16:45 投稿
Javaマルチスレッドプログラミング入門
マルチスレッド
java.Thread
—スレッド概要
-マルチタスク:
食事をしながらスマホを見る
ワイルドなドライバー:運転しながら電話をかけ、点滴を打つ
トイレでスマホを使う
現実ではこのように同時に複数のタスクを行う例がたくさんあります。一見すると複数のタスクが同時に進んでいるように見えますが、本質的には私たちの脳は同じ時間に一つのことしか行っていません ...
5月15日 16:02 投稿