CodeGym
キャンペーン
学習
コース
課題
アンケート & クイズ
ゲーム
ヘルプ
スケジュール
コミュニティ
ユーザー
フォーラム
チャット
記事
成功事例
アクティビティ
レビュー
サブスクリプション
ライトテーマ

レッスン

  • レビュー
  • 私たちについて
開始
学習開始
今すぐ学習を始める
  • 学習の進捗
  • コース
  • クエストマップ
  • レッスン
  • デッドロック: 原因、例、対策

    JAVA 25 SELF
    レベル 53,レッスン 0
    この講義では、Java におけるスレッドの相互ブロック(deadlock)とは何か、なぜ発生するのか、そしてそれに必要な4つの条件を解説します。 synchronized を用いた実例で再現し、その後、予防戦略を学びます。資源取得の順序統一、タイムアウト付きの ReentrantLock.tryLock の利用、クリティカルセクションの短縮、不要な入れ子ロックの排除などです。さらに、Thread Dump や jstack を使った診断、 BLOCKED/ WAITING 状態の見分け方を示し、最後にチェックリストと典型的な誤りで締めくくります。
    利用可能
  • Livelock と Starvation: 定義と例

    JAVA 25 SELF
    レベル 53,レッスン 1
    並行性の異常である Livelock と Starvation を解説します。彼らが Deadlock とどう違い、コードやログでどう見えるか。Java による例を紹介します: 「礼儀正しい作業者」(ライブロック)と、優先度や不公平なロックによる飢餓。問題の検出(ログ記録、 Thread dump、 VisualVM、 Java Mission Control)と予防: 再試行前のランダムな待機( Thread.sleep)、ノンブロッキングアルゴリズム、 ReentrantLock の公平性フラグ( new ReentrantLock(true))による公平なロック、丁寧に絞ったクリティカルセクション、そして setPriority() や synchronized の乱用を避けること。
    利用可能
  • スレッドセーフなコレクション: ConcurrentHashMap など

    JAVA 25 SELF
    レベル 53,レッスン 2
    この講義では、通常のコレクション( ArrayList、 HashMap)がマルチスレッド環境で危険な理由と、パッケージ java.util.concurrent が提供するスレッドセーフな代替について解説します: ConcurrentHashMap、 CopyOnWriteArrayList、 ConcurrentLinkedQueue、スキップリスト系の構造、および BlockingQueue。また、 merge、 putIfAbsent、 computeIfAbsent のような原子的操作を取り上げ、 Collections.synchronizedMap との比較、実践的な例、典型的な落とし穴(弱一貫性のイテレータ、非原子的な一連の操作など)も扱います。
    利用可能
  • AtomicInteger, AtomicReference: アトミック操作

    JAVA 25 SELF
    レベル 53,レッスン 3
    なぜインクリメント i ++ がマルチスレッドで正しく動作しないのか、アトミック操作とは何か、そしてそれを提供するパッケージ java.util.concurrent.atomic について説明します。 AtomicInteger と AtomicReference、メソッド incrementAndGet()、 compareAndSet(...)、内部メカニズム CAS(Compare-And-Swap、比較して置換)を解説し、いつ synchronized を選ぶべきか、いつ LongAdder を選ぶべきかも扱います。最後に、典型的なミス――複合操作、ABA 問題、入れ子のオブジェクトのスレッドセーフ性――を整理します。
    利用可能
  • マルチスレッドプログラムの診断とデバッグ

    JAVA 25 SELF
    レベル 53,レッスン 4
    Thread Dump を jstack、VisualVM、IDE で取得・読解し、スレッド状態( RUNNABLE、 BLOCKED、 WAITING)を判別し、相互ブロックを見つける方法。 Java Mission Control と Java Flight Recorder によるスレッド監視、ロギングの実践(スレッド名、 synchronized の入退出)、ロックの最小化、 CountDownLatch を用いた並行性テスト、実際のデッドロック事例の解析を扱います。最後に、典型的な誤りとその回避方法をまとめます。
    利用可能
  • 並列処理入門

    JAVA 25 SELF
    レベル 54,レッスン 0
    この講義ではマルチスレッドと並列処理の違いを扱います。どこでは応答性が重要で、どこでは複数コアによる実際の高速化が効くのか。 Thread によるスレッド生成、 Runnable の実装、高水準のプール ExecutorService を取り上げ、配列合計の簡単な例を見ます。並列処理が助けになる場合と妨げになる場合、さらに代表的な問題(データ競合、 synchronized による同期、デッドロック、負荷分散)も解説します。最後に比較表とシナリオの可視化を示します。
    利用可能
  • ExecutorService, Callable, Future: タスクの実行

    JAVA 25 SELF
    レベル 54,レッスン 1
    本格的なマルチスレッド実践: 手動で Threadを作成する代わりに ExecutorService にタスクを渡し、プール、キュー、ライフサイクル( shutdown(), shutdownNow())を管理する。 Runnable と Callable<T> の違いを解説し、 Future とそのメソッド( get(), isDone(), cancel(...), isCancelled())で結果を取得する。複数タスクの起動、 invokeAll/ invokeAny、 ExecutionException の扱いとよくある落とし穴も紹介する。
    利用可能
  • 並列ストリーム: 構文と活用

    JAVA 25 SELF
    レベル 54,レッスン 2
    通常のデータストリームをワンライナーで並列処理に切り替える方法 — parallelStream() や .parallel()、内部で動く ForkJoinPool.commonPool() の仕組み、いつ並列化が本当に高速化をもたらすか(大きなコレクション、「重い」処理)と、どこで逆に遅くなるかを解説します。フィルタリング、集約、ソート、パフォーマンス計測の例を示し、よくあるミスも取り上げます: forEach における副作用、順序の保持、コレクション選択、並列度の設定など。
    利用可能
  • ForkJoinPool と RecursiveTask: 再帰タスク

    JAVA 25 SELF
    レベル 54,レッスン 3
    Java における並列計算の実践ガイド。タスクプール ForkJoinPool と再帰タスク RecursiveTask<T>/ RecursiveAction の仕組み、work-stealing アルゴリズムの利点、 compute() の中で fork() によってタスクを分割し、 join() で結果を統合する方法を解説します。 pool.invoke() による実行、配列の合計や最大値探索の例、 parallelStream() における ForkJoinPool の位置付け、さらに典型的なエラーとその回避策も紹介します。
    利用可能
  • 並行プログラミングのベストプラクティス

    JAVA 25 SELF
    レベル 54,レッスン 4
    Java における並行プログラミングの実践ガイド: いつ ExecutorService を使うべきか、どこで parallelStream が役立つか、そしてどのようなタスクに ForkJoinPool が適しているか。 ConcurrentHashMap/ CopyOnWriteArrayList とアトミッククラス( AtomicInteger)を用いたスレッドセーフティ、 System.nanoTime() と JMH による性能計測、 Future.get() や ForkJoinTask からのエラー処理、 InterruptedException への正しい対応、さらにロギングの手法( Thread.currentThread().getName())とテスト手法( Awaitility)を取り上げます。最後に — ツール選択の表とよくある落とし穴を掲載します。
    利用可能
  • CompletableFuture 入門

    JAVA 25 SELF
    レベル 55,レッスン 0
    この講義では、なぜ同期コードがブロッキングを招くのか、どのような制約が Future(ブロッキングな get() など)にあったのか、そして java.util.concurrent パッケージの CompletableFutureが非同期処理の書き方をどう変えるのかを解説します。 supplyAsync でバックグラウンドにタスクを起動し、 thenAccept/ thenApplyで結果に購読する方法を練習し、 ForkJoinPool の役割と、典型的なミス(メインスレッドでの get()/ join()、 exceptionally/ handle によるエラー処理の欠落 など)についても議論します。
    利用可能
  • 非同期タスク: thenApply, thenAccept, thenRun

    JAVA 25 SELF
    レベル 55,レッスン 1
    CompletableFuture を使った非同期計算の起動と合成を解説します: supplyAsync と runAsync でタスクを開始する方法、ハンドラーである thenApply、 thenAccept、 thenRun の違い、そして非同期版の thenApplyAsync/ thenAcceptAsync/ thenRunAsync をいつ選ぶべきか。実行スレッド( ForkJoinPool またはあなたの Executor)、結果の型( CompletableFuture<T>、 CompletableFuture<Void>)と、典型的な落とし穴についても扱います: ブロッキングな get()/ join()、 exceptionally/ handle/ whenComplete を使わないエラー未処理、さらに thenRun の中で結果を使おうとすること。
    利用可能
  • 1
  • ...
  • 23
  • 24
  • 25
  • 26
  • 27
  • ...
  • 30
学ぶ
  • 登録
  • Javaコース
  • 課題のサポート
  • 料金
  • ゲームプロジェクト
  • Java構文
コミュニティ
  • ユーザー
  • 記事
  • フォーラム
  • チャット
  • 成功事例
  • アクティビティ
  • アフィリエイトプログラム
会社情報
  • 私たちについて
  • 連絡先
  • レビュー
  • プレスルーム
  • CodeGym for EDU
  • よくある質問
  • サポート
CodeGymCodeGym は、ゼロからJavaプログラミングを学ぶためのオンラインコースです。このコースは初心者がJavaを習得するのに最適です。即時検証付きの1200以上の課題と、Java基礎理論の必要な範囲を含みます。学習の成功を支援するために、クイズ、コーディングプロジェクト、効率的な学習に関するコンテンツ、Java開発者のキャリアに関する機能など、一連のモチベーション機能を導入しています。
フォローする
インターフェース言語
English Deutsch Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands
日本語
한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
「プログラマーは生まれるのではなく、育てられる」 © 2026 CodeGym
MastercardVisa
「プログラマーは生まれるのではなく、育てられる」 © 2026 CodeGym