125-java-concurrency について
Java の並行コードをレビュー、改善するためのスキルです。例に基づく指針を示し、変更前のコンパイルと変更後の完全な検証を求めます。
主な機能
- 01スレッドセーフ性と同期の指針
- 02ExecutorService と仮想スレッドのパターン
- 03非同期合成と協調処理のパターン
- 04キャンセル、バックプレッシャー、デッドロック対策
- 05変更前のコンパイルと完全なビルド検証
活用シーン
- 01Java コードの競合状態のレビュー
- 02用途に応じた並行プリミティブの選定
- 03キャンセル処理とスレッドプール動作の改善
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jabrena/ plinth --skill 125-java-concurrencyインストール後、Claude Code で/125-java-concurrencyを入力して読み込まれたか確認します。
同梱ファイルreferences/125-java-concurrency.md
詳細
並行処理オブジェクトに関する Java ルール
最新の java.util.concurrent ユーティリティと仮想スレッドを使用し、Java の並行処理に関するベストプラクティスを特定して適用することで、スレッドセーフ性、スケーラビリティ、保守性を向上させます。
このスキルの対象範囲
- スレッドセーフの基礎:
ConcurrentHashMap、AtomicInteger、ReentrantLock、ReadWriteLock、Java メモリモデル ExecutorServiceスレッドプールの設定:サイズ、キープアライブ、境界付きキュー、拒否ポリシー、正常なシャットダウンBlockingQueueを使ったプロデューサー・コンシューマーパターンとパブリッシュ・サブスクライブパターン- ノンブロッキングな非同期処理の合成に使う
CompletableFuture(thenApply/thenCompose/exceptionally/orTimeout) - 不変性と安全な公開(
volatile、静的イニシャライザー) - ロック競合と偽共有のパフォーマンス最適化
- I/O バウンドのスケーラビリティ向上に使う仮想スレッド(
Executors.newVirtualThreadPerTaskExecutor()) - Java 27 プレビュー版における、関連するサブタスク向けの構造化並行処理(
StructuredTaskScope) - 不変のタスク間データには
ThreadLocalよりScopedValueを使用 - 協調的キャンセルと
InterruptedExceptionの適切な処理 - 境界付きキューと
CallerRunsPolicyによるバックプレッシャー - グローバルなロック順序とタイムアウト付き
tryLockによるデッドロック回避 - CPU バウンドの処理における ForkJoin/並列ストリームの適切な使用
- 仮想スレッドのピン留めの検出(JFR
VirtualThreadPinned) - スレッド名と
UncaughtExceptionHandlerによる可観測性の向上 - 用途に適したプリミティブ:
LongAdder、CopyOnWriteArrayList、StampedLock、Semaphore、CountDownLatch、Phaser
対象範囲: このリファレンスは、各主要分野について、良い/悪いコードパターンの例を中心に構成されています。該当する例に基づいて推奨事項を適用してください。
制約
並行処理に関する変更を適用する前に、プロジェクトがコンパイルできることを確認してください。コンパイルに失敗した場合は、直ちに中止してください。コンパイル失敗は、処理を妨げる条件です。改善を適用した後は、完全な検証を実行してください。
- 必須:変更を適用する前に
./mvnw compileまたはmvn compileを実行してください - 安全性:コンパイルに失敗した場合は、直ちに中止してください。コンパイル失敗は、以降の処理をすべて妨げる条件です
- 検証:改善を適用した後に
./mvnw clean verifyまたはmvn clean verifyを実行してください - 適用前:各並行処理パターンの詳細な良い/悪い例、制約、安全対策について、リファレンスを読んでください
このスキルを使用する場面
- Java コードの並行処理をレビューする
- Java コードのスレッドセーフ性をレビューする
- Java の並行処理コードにおける競合状態を修正する
- Java で
ExecutorServiceと仮想スレッドのどちらを使うか選択する - 同期処理と共有可変状態の扱いを改善する
- 関連する Java サブタスクに構造化並行処理を適用する
ワークフロー
- 並行処理の変更前にプロジェクトをコンパイルする
./mvnw compile または mvn compile を実行し、コンパイルに失敗した場合は直ちに中止してください。
- 並行処理のリファレンスを読み、問題箇所を分析する
references/125-java-concurrency.md を読み、対処すべきスレッドセーフ性、協調処理、スループットに関する問題を特定してください。
- 並行処理の改善を適用する
適切な並行処理パターン、関連するサブタスクに適した構造化タスクスコープ、適切なキャンセル処理、および用途に適したプリミティブを実装してください。
- 完全なビルドで検証する
改善を適用した後に ./mvnw clean verify または mvn clean verify を実行してください。
リファレンス
詳細なガイダンス、例、制約については、references/125-java-concurrency.md を参照してください。