강의

멘토링

커뮤니티

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関数型プログラミングとラムダの使い方

こんにちは
です。

10,077

受講生

352

受講レビュー

1,212

回答

4.9

講座評価

5

講座

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

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

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

 

カリキュラム

全体

103件 ∙ (44時間 9分)

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

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

受講レビュー

全体

53件

4.9

53件の受講レビュー

  • 피터님의 프로필 이미지
    피터

    受講レビュー 30

    平均評価 5.0

    5

    100% 受講後に作成

    매우 잘 들었습니다!!!! 좋은 강의였습니다!

    • 정회운님의 프로필 이미지
      정회운

      受講レビュー 15

      平均評価 5.0

      5

      30% 受講後に作成

      동시성, 병렬성 등 강의해주시는 내용 하나하나 다 이해가 되고 있습니다. 몰랐던 부분, 헷갈렸던 부분을 완벽하게 짚고 넘어갈 수 있었습니다. 정말 좋은 강의 해주셔서 감사합니다.

      • 열심히 공부하겠습니다!님의 프로필 이미지
        열심히 공부하겠습니다!

        受講レビュー 7

        平均評価 5.0

        5

        19% 受講後に作成

        쓰레드에 대한 개념이 부족했다면 무조건 강추하는 강의입니다! 아직 완강하려면 멀었지만 정말 돈이 아깝지 않은 강의입니다! 이런분이 사수로 계셨다면 얼마나 좋았을까요..! 여튼 강추입니다! 다음 강의도 기대하고 있겠습니다! 시큐리티 강의도 잘봤습니다~ 나중에 DB 관련된 강의도 진행해주시면 감사하겠습니다!

        • 정수원
          知識共有者

          네 이번에 스레드에 개념을 확실히 다지고 한단계 더 성장하는 밑거름이 되시길 바랍니다 감사합니다!!

      • 수환무님의 프로필 이미지
        수환무

        受講レビュー 17

        平均評価 5.0

        5

        100% 受講後に作成

        스프링 시큐리티 때부터 듣고 있는데 강의 자료에 디테일이나 꼼꼼한 설명이 정수원 강사님의 강점이라고 생각합니다. !!! 이런 강의를 준비한다는 것 자체가 많음 품이 들어가는 작업인데, 매번 감사드립니다. 주니어 개발자로서 성장하는 과정에서 꼭 들어야할 강의네요 !!!

        • 정수원
          知識共有者

          네 감사드립니다 수환무님도 계속 성장하는 개발자 되길 진심으로 응원합니다!!

      • pcdoom.co님의 프로필 이미지
        pcdoom.co

        受講レビュー 1

        平均評価 5.0

        5

        6% 受講後に作成

        열심히공부해서 마스터하겠습니다.

        • 정수원
          知識共有者

          네 pcdoom.co 님 저도 꼭 마스터하시길 응원하겠습니다^^ 감사합니다~

        • 향후 정수원님의 스프링 시큐리티말고 스프링 웹개발 관련 강의들을 꼭 듣고싶습니다. 진짜 모든 강의들이 다 디테일을 살려 강의하신것같아요

        • 정수원
          知識共有者

          네 저도 개발자로서의 끊임없는 성장을 위해 계속 노력하겠습니다 감사합니다~

      ¥12,360

      leavenの他の講座

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

      似ている講座

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