강의

멘토링

로드맵

BEST
Programming

/

Back-end

Javaの並行性プログラミング[Reactive Programming Part.1]

Javaの並行性メカニズムとマルチスレッド技術を深く扱い、実務に直面するさまざまな並列処理問題を解決するために必要な知識とスキルを学びます。基本的なスレッド管理から始めて、高度な同期技術、スレッドプールの使用方法、およびJavaの同時実行関連クラスを深く学習します

  • leaven
동시성
멀티스레드
concurrent
multithread
synchronisation
asynchronous-programming
Java

学習した受講者のレビュー

こんなことが学べます

  • Javaの並行性の理解

  • さまざまなマルチスレッドパターンを習得する

  • 同期技術と種類の理解

  • 非同期プログラミング理論と実践

  • リアクティブプログラミングのための基礎となる

最近コンピューティング環境で必須
並行性プログラミング!

マルチコアプロセッサの普遍化と分散コンピューティング環境の進歩により、並行性プログラミングの重要性はこれまで以上に高まっています。 Javaはこれらの変化に合わせて強力な並行性プログラミング機能を提供します。
このコースでは、現代のコンピューティング環境で不可欠な並行性プログラミングをJava言語で深く学ぶことができます。


さまざまな機能とパターン実習で学ぶ
Java同時実行プログラミング

Javaメモリモデルの理解から始めて、スレッド(Thread)の管理、同期(Synchronization)技術、デッドロック(Deadlock)解決戦略、パラレルストリーム(Parallel Streams)、非同期プログラミング機能であるCompletableFutureなど、高度な並行性機能に至るまで、深い知識を得ることができます。

また、理論的な知識伝達だけでなく、実際のコーディングの例といくつかの事例を通じて理論を実際のトラブルシューティングに適用する方法を教えており、volatileキーワード、synchronizedブロック、ReentrantLocks、Conditionオブジェクトなど、Javaの同期メカニズムを直接経験することになります。

さらに、Atomic変数、CountDownLatch、CyclicBarrier、SemaphoreなどのJavaの同時実行ユーティリティを使用する方法を学びます。さらに、並列処理とパフォーマンス最適化戦略も重要な学習トピックです。

さらに、リアクティブプログラミングの基礎と基礎知識を築くための基礎としての役割を果たし、Javaの次世代スレッドモデルであるVirtual Threadを準備する重要な基礎になると確信しています。


入門者、中・高級者全員のための講義

本講座はJava同時性に初めて接する入門者から基礎的な知識や使用経験はありますが、より深い知識の習得とJava同時性の核心原理、内部構造、動作方式などを深く理解し、これを応用したい中上級者のために製作しました。

主な学習内容💡

このレッスンは、並行性プログラミングのための重要なテーマであり、Javaスレッドとの同期、並行性プログラミング、および非同期プログラミングの3つの軸を中心にレッスンを行います。

1. Javaスレッドと同期を理解する

Javaでは、スレッドはプロセス内の軽量プロセスであり、プログラムの同時実行フローを意味し、Threadクラスを拡張するか、Runnableインタフェースを実装することによって生成されます。これにより、開発者は複数のスレッドを同時に実行して効率を向上させることができます。スレッドの作成後、start() メソッドを呼び出してスレッドを実行します。スレッドのライフサイクル管理は、join()、sleep()、interrupt() などの基本 API を通じて行われます。スレッド活用はマルチタスクとリソース共有の最適化に重要な役割を果たし、複数のスレッドが同時に実行されるときにデータの一貫性と状態管理のために同期が必要です。



同期はマルチスレッド環境で重要な概念であり、共有リソースへの同時アクセスを制御してデータの整合性を保証します。 Javaでは、synchronizedキーワードを使用してメソッドまたはブロックを同期でき、特定の時点で1つのスレッドのみが同期コード領域にアクセスできます。さらに、Lockインタフェースと実装クラスはより細かい同期制御を可能にし、ReentrantLockは最も代表的な実装であり、再入可能なロック機能を提供します。

Javaはさまざまな同期ツールを提供し、CountDownLatch、CyclicBarrier、Semaphoreなどはスレッド間の連携のための高度な同期メカニズムを提供します。これらのツールは、スレッドの実行順序を制御したり、特定の条件が満たされるまでスレッドを待機するなどの複雑な同期操作を簡素化します。このようなJavaのスレッドと同期機能は、マルチスレッドアプリケーションの開発に不可欠な理解と活用が必要な重要な部分です。


それでは、まずJavaスレッドの全体的な概念と並行性の問題と同期の種類とテクニックを見てみましょう。

2. 並行性プログラミング

並行性プログラミングでは、スレッドプールはExecutorフレームワークを介して実装され、複数のスレッドを効率的に管理および再利用することができます。これはExecutorService、ScheduledExecutorServiceなどのインタフェースで構成され、CallableおよびFutureインタフェースを利用して戻り値を持つ操作を処理し、結果を非同期的に受け取ることができます。



ExecutorServiceはスレッドプールの実行と管理を担当し、submit()メソッドを使用してタスクをスレッドプールに送信し、shutdown()またはshutdownNow()メソッドを介してスレッドプールを安全に中断および終了できます。

さらに、Executorsクラスはさまざまな種類のスレッドプールを簡単に作成できるファクトリメソッドを提供し、ThreadPoolExecutorはスレッドプールの具体的な実行メカニズムを提供し、マルチタスク処理でパフォーマンスとリソースの利用を最適化できます。

これらのスレッドプールに関連する並行性プログラミングの理解は、Javaベースのマルチスレッドアプリケーションの開発にとって不可欠な要素であり、効率的なリソース管理と高性能アプリケーションの実装にとって重要です。



このパートでは、マルチスレッド環境で並行性プログラミングを簡単かつ安全に実装する方法を学びます。

3. 非同期プログラミング

非同期プログラミングは、複雑なアプリケーションにとって不可欠な並行性パラダイムであり、同期および非同期スキームとそれに関連するBlockingとNon-Blocking呼び出しの概念を通じてタスクの実行フローを構造化します。

これは、タスクが即座に完了しないときにリソースが無駄にならないようにし、プログラムが他のタスクを続行できるようにする概要と構造を提供します。


Javaでは、CompletableFutureは非同期プログラミングのためのAPI構造を提供し、非同期操作の開始、実行、および結果操作のためのさまざまなメソッドを提供し、これは単一の結果操作から複数の非同期操作の組み合わせまで幅広く適用できます。

さらに、例外処理のためのメカニズムを含む、ジョブの完了処理に加えて、待機およびキャンセル処理機能により、より堅牢で柔軟な非同期プログラミングを可能にします。

このように、非同期プログラミングはシステムの反応性を高め、リソースをより効率的に活用し、アプリケーションのパフォーマンスを最適化するのに大きな役割を果たします。





このパートでは、CompletableFutureを活用した非同期プログラミングの全体的な内容を見ていきます。

講義の構成と詳細なカリキュラム🏃

セクション 1. オペレーティングシステムの基本

  • オペレーティングシステムの基本原理とマルチタスク、プロセスとスレッドの違いを学びます。

  • Parallel & Concurrent、Context Switch、CPU Bound & I/O Bound、ユーザーモード & カーネルモードなど、コアなオペレーティングシステムの概念を通じて同時実行プログラミングの基礎を理解し、スケジューリングの基本原則を学びます

セクション2. Java Thread Fundamentals - スレッドの作成と実行構造

  • Javaでスレッドを作成、実行、終了する方法を詳しく学びます。

  • スレッドのライフサイクルを各状態ごとにシミュレートしながら、各状態ごとにどのような特徴と実行フローで持っているかを段階的に学習します。

セクション3. Java Thread Fundamentals - スレッド基本API

  • Javaのスレッド関連APIの詳細な概念と構造について説明します。

  • sleep、join、interrupt、priority などマルチスレッド実装において必ず知るべき概念とネイティブメソッド実行による JVM と OS 間の接続構造やフローについて深く学習します。

セクション4. Java Thread Fundamentals - スレッドの活用

  • 実際のプロジェクトでスレッドを効果的に使用する方法を学びます。

  • ハングやリカバリなどのトピックを扱い、スレッドグループとスレッドローカル、スレッド例外処理などについて学習します。

セクション 5. Synchronization Fundamentals - 同期の概念

  • 同期の基本概念とマルチスレッド環境での重要性を深く学びます。

  • 同期とCPUとの関係、Critical Seciton、安全なスレッド構成など、同期技術を理解するための基本的な概念を深く学習します。

セクション 6. Synchronization Fundamentals - 同期技術

  • 同期のさまざまな手法とその適用方法を詳しく説明します。

  • 同期技術であるミューテックス、セマフォ、モニター、Spin Lockなど、ロックの概念と同期を使用したデータ保護と一貫性の維持戦略を学びます。

セクション7. Java Synchronization

  • Javaが提供する同期メカニズムを詳細に学習します。

  • Synchronizedの概念、条件変数、volatile、デッドロックなどを含むJavaが提供するさまざまな同期メカニズムをカバーします。

セクション8. Java Locks

  • Javaのロックインタフェースとさまざまな種類のクラスを学び、Lockの使い方とLockによる同期の問題を解決する方法を学びます。

  • 特に、書き込みロックと読み取りロックの特徴と長所と短所などを調べて、ロックの条件変数活用法と実務例を通じた正確な使用方法を習得できるようにします。

セクション9. Java同期ツール

  • Javaが提供するさまざまな同期ツールを学びます。

  • Atomic Variables(シングルオペレーション変数)、Atomic * FieldUpdater(シングルオペレーションフィールドアップデート)、カウントダウンラッチ、サイクリックバリアなどのツールを使用した実際の適用方法を学習します。

セクション10. Java同時実行フレームワーク

  • Javaが提供するExecutor、ExecutorService、およびExecutorsクラスの概念と特徴を理解し、スレッドプールを使用してマルチスレッドアプリケーションを効率的に管理および最適化する方法を学びます。

  • Futureインターフェースを介して非同期操作の結果をどのように処理し管理するかについての実践的な知識を提供します。

  • これらの概念を実際の事例と実践を通して適用することで、複雑な並行性の問題を解決し、応答性とパフォーマンスに優れたJavaアプリケーションを開発することができます。

セクション 11. ThreadPoolExecutor

  • ThreadPoolExecutorの原理と使い方を詳しく学びます。

  • スレッドプールの作成、管理、最適化の方法を説明し、スレッドプールを使用した効率的なリソース管理、例外処理の管理方法などについて学び、アーキテクチャとフローチャート全体を見てください。

セクション 12: CompletableFuture

  • Javaの非同期プログラミング機能であるCompletableFutureについて詳しく説明します。

  • Java 8で導入されたこの強力なクラスにより、非同期プログラミングの基本概念から始めて、実際のワークフローを構成および管理する方法を学ぶことができます。

  • 各セッションは、CompletableFutureのさまざまなメソッドとユースケースを詳細に説明し、例外処理、結果の組み合わせ、および非同期タスクの連鎖などの実用的なテクニックを学びます。

この講義を作った
知識共有者を紹介します。

浄水源(leaven)

  • 現職のJava開発者

  • SI/SM/ソリューション/Mobile/Front&Back-end のさまざまなプロジェクト体験

  • Architect/PM/PL として役割を果たす

  • Github

こんな方に
おすすめです

学習対象は
誰でしょう?

  • Java同時実行プログラミングの世界を体験したい方

  • スレッドの全体的な概念を確実に確立したい方

  • マルチスレッド環境でアプリケーションを開発したい方

  • 同期技術と種類の明確な概念を知りたい人

  • Java非同期プログラミングについて知りたい人

前提知識、
必要でしょうか?

  • Javaの基礎

  • Java関数型プログラミングとラムダの使い方

こんにちは
です。

9,952

受講生

331

受講レビュー

1,211

回答

4.9

講座評価

5

講座

다양한 프로젝트에서 웹/모바일/솔루션 제품 개발과 관련된 업무를 진행해 오고 있으며 분석/설계/개발 Role 을 맡아 오고 있습니다.

공공기간, 교육프로그램, 기업 프로젝트, 쇼핑몰 등의 웹 개발 및 솔루션 프로그램, 프레임워크, 오픈소스 연동 등의 아키텍처 설계 및 구조적 고도화 개선 등을 해 오고 있으며 개발, PL 등의 역할을 맡았습니다.

다양한 Open Source 와 여러 기술적인 경험들을 통해 웹의 전반적인 기술 흐름들을 익혔으며 개발 경험이 거듭될 수록 요구사항의 기능 구현에만 거치지 않고 좀 더 OOP 적인 구조의 소프트웨어로서 안전성과 성능을 고려한 아키텍처링과 튜닝의 기술들을 접목시켜 지속적으로 더 훌륭한 소프트웨어를 완성하기 위한 연구와 개발 실무를 책임감 있게 맡아 오고 있습니다.

 

カリキュラム

全体

103件 ∙ (44時間 9分)

講座資料(こうぎしりょう):

授業資料
講座掲載日: 
最終更新日: 

受講レビュー

全体

51件

4.9

51件の受講レビュー

  • hanjn28429394님의 프로필 이미지
    hanjn28429394

    受講レビュー 30

    平均評価 5.0

    5

    100% 受講後に作成

    I listened very well!!!! It was a good lecture!

    • hoestory님의 프로필 이미지
      hoestory

      受講レビュー 15

      平均評価 5.0

      5

      30% 受講後に作成

      I understand each and every content you lectured on, such as concurrency and parallelism. I was able to completely understand the parts I didn't know or was confused about. Thank you for the great lecture.

      • ats30591794님의 프로필 이미지
        ats30591794

        受講レビュー 7

        平均評価 5.0

        5

        19% 受講後に作成

        If you lack the concept of threads, this is a lecture that I definitely recommend! It's still a long way to go to finish it, but it's a lecture that I really don't regret spending money on! How great it would have been if I had someone like this as my teacher..! Anyway, I highly recommend it! I'm looking forward to the next lecture! I enjoyed the security lecture too~ I would appreciate it if you would hold a lecture related to DB in the future!

        • leaven
          知識共有者

          Yes I hope this thread will solidify the concept and become a foundation for further growth Thank you!!

      • zzanggoon8님의 프로필 이미지
        zzanggoon8

        受講レビュー 17

        平均評価 5.0

        5

        100% 受講後に作成

        I've been listening since Spring Security, and I think the strength of instructor Jeong Su-won is the detailed and thorough explanations in the lecture materials. !!! Preparing these lectures is a lot of work in itself, and I'm always grateful. This is a lecture that you must listen to as you grow as a junior developer!!!

        • leaven
          知識共有者

          Yes, thank you. I sincerely hope that you will continue to grow as a developer, Su-Hwan-Mu!!

      • pcdoomco8559님의 프로필 이미지
        pcdoomco8559

        受講レビュー 1

        平均評価 5.0

        5

        6% 受講後に作成

        I will study hard and master it.

        • leaven
          知識共有者

          Yes pcdoom.co I will definitely cheer for you to master it^^ Thank you~

        • In the future, I really want to listen to lectures on Spring web development, not just Spring Security by Jeong Su-won. I think all the lectures are really detailed.

        • leaven
          知識共有者

          Yes I will continue to strive for continuous growth as a developer Thank you~

      ¥11,953

      leavenの他の講座

      知識共有者の他の講座を見てみましょう!

      似ている講座

      同じ分野の他の講座を見てみましょう!