강의

멘토링

로드맵

Inflearn brand logo image
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,822

受講生

323

受講レビュー

1,208

回答

4.9

講座評価

5

講座

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

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

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

 

カリキュラム

全体

103件 ∙ (44時間 9分)

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

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

受講レビュー

全体

49件

4.9

49件の受講レビュー

  • hanjn28429394님의 프로필 이미지
    hanjn28429394

    受講レビュー 29

    平均評価 5.0

    5

    100% 受講後に作成

    Tôi đã nghe rất rõ!!!! Đây là một bài giảng tuyệt vời!

    • hoestory님의 프로필 이미지
      hoestory

      受講レビュー 15

      平均評価 5.0

      5

      30% 受講後に作成

      Tôi hiểu từng điều bạn dạy, chẳng hạn như sự tương tranh và song song. Tôi đã có thể chỉ ra đầy đủ những phần tôi chưa biết hoặc còn bối rối. Cảm ơn bạn đã cho một bài giảng thật hay.

      • ats30591794님의 프로필 이미지
        ats30591794

        受講レビュー 7

        平均評価 5.0

        5

        19% 受講後に作成

        Nếu bạn thiếu khái niệm về chủ đề, tôi chắc chắn khuyên bạn nên tham gia khóa học này! Vẫn còn một chặng đường dài để đi, nhưng nó chắc chắn đáng đồng tiền bát gạo! Sẽ tuyệt biết bao nếu có một xạ thủ như thế này..! Dù sao, rất khuyến khích! Tôi đang mong chờ bài giảng tiếp theo! Tôi cũng rất thích bài giảng về bảo mật. Tôi sẽ đánh giá cao nếu bạn cũng có thể tổ chức một bài giảng liên quan đến DB trong tương lai!

        • leaven
          知識共有者

          Đúng Tôi hy vọng chủ đề này củng cố các khái niệm và làm nền tảng cho sự phát triển hơn nữa. Cảm ơn!!

      • zzanggoon8님의 프로필 이미지
        zzanggoon8

        受講レビュー 16

        平均評価 5.0

        5

        100% 受講後に作成

        Tôi đã nghe Spring Security từ đầu và tôi nghĩ điểm mạnh của giảng viên Jeong Su-won là sự chi tiết và giải thích cặn kẽ trong tài liệu bài giảng. !!! Việc chuẩn bị một bài giảng như thế này bản thân nó đã tốn rất nhiều công sức nhưng tôi luôn biết ơn. Đây là bài giảng phải nghe khi bạn phát triển với tư cách là một nhà phát triển cấp dưới!!!

        • leaven
          知識共有者

          vâng cảm ơn bạn Tôi chân thành hy vọng rằng Suhwanmu tiếp tục phát triển với tư cách là một nhà phát triển!!

      • pcdoomco8559님의 프로필 이미지
        pcdoomco8559

        受講レビュー 1

        平均評価 5.0

        5

        6% 受講後に作成

        Tôi sẽ học tập chăm chỉ và làm chủ nó.

        • leaven
          知識共有者

          Có pcdoom.co Mình cũng sẽ hỗ trợ bạn làm chủ nó ^^ Cảm ơn bạn~

        • Trong tương lai, không phải An Xuân của Jeong Soo-won. Tôi thực sự muốn tham gia các khóa học liên quan đến phát triển web Spring. Tôi thực sự nghĩ rằng tất cả các bài giảng đều được giảng dạy rất chú trọng đến từng chi tiết.

        • leaven
          知識共有者

          Đúng Tôi sẽ tiếp tục phấn đấu để phát triển liên tục với tư cách là một nhà phát triển. Cảm ơn bạn~

      ¥11,714

      leavenの他の講座

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

      似ている講座

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