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

レッスン

  • レビュー
  • 私たちについて
開始
学習開始
今すぐ学習を始める
  • 学習の進捗
  • コース
  • クエストマップ
  • レッスン
  • Scoped Values と新しいスレッド機構 (Java 21+)

    JAVA 25 SELF
    レベル 57,レッスン 4
    従来の ThreadLocal が仮想スレッドの世界でなぜ通用しにくくなり、どのように ScopedValue がその代替となるのかを解説します。スレッドではなく実行スコープに結び付いたコンテキストという発想。コンテキスト(ユーザー、 REQUEST_ID)の受け渡し、ネストしたスコープとそのオーバーライド、仮想スレッドとの統合( Executors. newVirtualThreadPerTaskExecutor())を段階的に紹介します。 ThreadLocal と ScopedValue の比較、実践的なヒント、制約、そして Structured Concurrency(プレビュー)についても議論します。
    利用可能
  • Structured Concurrency

    JAVA 25 SELF
    レベル 58,レッスン 0
    Structured Concurrency は、雑然としたスレッドの集まりを制御されたタスク階層へと変えます。仮想スレッド内で StructuredTaskScope を使ってサブタスクを起動し、 join() で待機し、 throwIfFailed() でエラーを一元的に処理し、 resultNow()/ result() で結果を取得します。終了ポリシーの ShutdownOnFailure と ShutdownOnSuccess を解説し、 CompletableFuture と比較し、HTTP アグリゲーターの例や、構造化並行性を使う際の典型的な落とし穴も見ていきます。
    利用可能
  • タスクのキャンセルとスタック全体へのタイムアウト伝播

    JAVA 25 SELF
    レベル 58,レッスン 1
    Java で長時間およびブロッキングする処理を正しくキャンセルする方法: Thread.interrupt() による協調的割り込み、 Future.cancel() によるタスクのキャンセルと CancellationException の挙動、 CompletableFuture におけるタイムアウトとキャンセル( orTimeout、 completeOnTimeout)、 StructuredTaskScope を用いた構造化並行性、共通のデッドライン(time‑budget)とスタック下方向へのタイムアウト伝播( Instant/ Duration および Scoped Values を含む)。ブロッキングIOでの実務と典型的な誤りを解説します。
    利用可能
  • 高水準シンクロナイザ

    JAVA 25 SELF
    レベル 58,レッスン 2
    この講義では、 java.util.concurrent にある高水準のシンクロナイザ、 CountDownLatch、 CyclicBarrier、 Phaser、 Exchanger を解説します。 await()/ countDown() でタスクの開始・終了を調整し、 await() で再利用可能なフェーズとバリアアクションを構築し、 register()/ arriveAndAwaitAdvance()/ arriveAndDeregister() で「オーケストラ」の動的な参加者を管理し、 exchange() でペア間のデータ交換を行います。実践では多数のワーカーの一斉スタートや「ゲームのティック」を実装し、典型的な落とし穴も扱います: CountDownLatch の一度きりの性質、 BrokenBarrierException の処理、正しい deregister() など。どこでも wait()/ notify() の痛みなしで進めます。
    利用可能
  • StampedLock と低競合カウンタ

    JAVA 25 SELF
    レベル 58,レッスン 3
    ReentrantReadWriteLock や古典的な ReadWriteLock が高負荷下で頭打ちになり始めたとき、楽観的読み取りを備えた StampedLock が役に立ちます。 tryOptimisticRead + validate の組み合わせにより、書き込みがまれな状況では「ほぼ無料」の読み取りが可能です。ロックモード、スタンプの扱い、再入不可の制約を整理し、 ReentrantReadWriteLock と比較します。さらに低競合カウンタである LongAdder と LongAccumulator を取り上げ、なぜ競合時に AtomicLong を上回るのかを説明します。最後は実践として、読み取り優勢のキャッシュとミニベンチマークで締めくくります。
    利用可能
  • Java Memory Model (JMM)

    JAVA 25 SELF
    レベル 58,レッスン 4
    Java Memory Model における可視性と操作の順序付けの規則を解説します。関係 happens-before が何を意味するか、 volatile、 synchronized、final フィールド( final)がいつ・どのように役立つか、そしてそれらがないと「ステール」なデータがなぜ生じるのかを説明します。オブジェクトの安全な公開、正しい double-checked locking、 VarHandle による低レベルアクセス、偽共有の影響とアノテーション @Contended、さらに Thread.start()/ Thread.join()、 Future.get()、マイクロベンチマーク JMH に関する実践的な注意点も取り上げます。
    利用可能
  • ファイルのマルチスレッド読み書き

    JAVA 25 SELF
    レベル 59,レッスン 0
    Java におけるファイルの並列処理の実践ガイド:マルチスレッドが本当に IO を高速化する場合とそうでない場合、ツールの選択 — Thread、 ExecutorService によるスレッドプール、 CompletableFuture と並列ストリームの非同期処理 — さらに FileChannel による大きなファイルの分割読み、共通ログへの安全な書き込み、OS/ファイルシステムの制約。タスク起動パターン、プール設定、 shutdown()/ awaitTermination() メソッド、よくあるミスも解説します。
    利用可能
  • ファイルの並列処理: ForkJoin、Parallel Streams

    JAVA 25 SELF
    レベル 59,レッスン 1
    Java におけるファイル処理タスクの並列化に関する実践ガイド。 Stream API で parallel()/ parallelStream() を使って並列化を有効にする方法、 ForkJoinPool の仕組みと設定方法、そして RecursiveTask を使うべき場面を解説します。どこで並列化が本当に I/O を高速化するのか、共通スレッドプールの管理方法、リソースを安全にクローズする方法( try-with-resources)も扱います。最後に、大きなファイルの一部を読み書きするための FileChannel による位置指定アクセスを手短に見ていきます。
    利用可能
  • ファイルシステムの並列走査: Files.walk + parallel() と ForkJoin

    JAVA 25 SELF
    レベル 59,レッスン 2
    巨大なディレクトリの走査と何千ものファイル処理を高速化する方法: Files.walk() と parallel() による並列ストリームを使い、 ForkJoinPool.commonPool() の役割を理解して並列度を調整します。いつ ExecutorService に切り替えるべきか、 CPU-bound と IO-bound の違い、すべての ".java"ファイルで行数を数える例、そしてベストプラクティスを整理します。
    利用可能
  • 巨大ファイルをチャンクに分割する

    JAVA 25 SELF
    レベル 59,レッスン 3
    ギガバイト級のファイル処理を高速化する方法: チャンク(chunking)に分割し、位置指定アクセスを FileChannel で行い、memory-mapped バッファ MappedByteBuffer を使い、 ExecutorService で計算を並列化する。位置指定 I/O の主要メソッド position(...)、 read(...)、 write(...)、チャンクサイズ選定の基準、並列ワードカウントの例、そして典型的なミス(チャンク境界、リソース、スレッド数)を解説する。
    利用可能
  • ファイル処理パイプライン: Producer–Consumer

    JAVA 25 SELF
    レベル 59,レッスン 4
    Producer–Consumer パターンに沿って、 BlockingQueue(例: ArrayBlockingQueue)を介した安全な受け渡しでファイル処理パイプラインを構成する方法、ブロッキング操作 put() と take() の動作、 backpressure の必要性、そして「poison pill」(例: "__END__"、 null は不可)によるスレッドの正しい終了方法を解説します。 ExecutorService でコンシューマーを起動し、パイプラインの可視化を追加して、典型的なミスを取り上げます。
    利用可能
  • モジュール入門: なぜ必要か

    JAVA 25 SELF
    レベル 60,レッスン 0
    Java 9 がモジュールシステム JPMS を導入した理由を解説します。いわゆる「 classpath パーティー」がなぜ問題か、モジュールがコンテナレベルで可視性の境界をどう導入するか、 module-info.java とは何か、そして module、 exports、 requires、 opens、 uses/ provides といったディレクティブの使い方を扱います。利点(カプセル化、依存関係の明示、セキュリティ、 jlink)、適用箇所( java.base、 java.sql を含む)、便利な注意点や移行時の典型的な失敗( exports の入れ忘れ、 requires の書き漏れ、モジュール名の重複)も議論します。
    利用可能
  • 1
  • ...
  • 25
  • 26
  • 27
  • 28
  • 29
  • 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