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コース
  • 課題のサポート
  • 料金
  • ゲームプロジェクト
  • 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