강의

멘토링

로드맵

Inflearn brand logo image
BEST
Programming

/

Programming Language

基礎をしっかり!徹底的に始めるJava Part 3(上) : マルチスレッドと同期化

初心者脱出の秘訣公開!Javaマルチスレッドプログラミングと同期化技法について徹底解説します!

  • nullnull8537
이론 실습 모두
Java
multithread
jvm
lock-free
generic

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

こんなことが学べます

  • Javaベースのマルチスレッドプログラミング技法

  • Javaメモリモデルと同期メカニズム、そしてJVM構造

  • 高性能ロックフリーキューを実装する方法

マルチスレッドプログラミングと同期技術について、専攻者レベルの高い理解を得ることができます。
開発者の競争力は唯一のスキルです。この講義で確実に差別化された競争力を確保しましょう!

「Javaメモリモデル」まで
深く扱う理由🤔

この講義をきちんと終えたら
専攻者に批判できる高い理解に基づいて
Javaを活用できます。

マルチスレッドプログラミングと同期

1つのプログラムで複数のスレッドを実行し、同時に動作する方法と同期技術について学びます。 synchronized 予約語を使った簡単な方法から JVM 内部構造による特性まで深くしっかり学びます。

JMM(*Java Memory Model)

Javaマルチスレッド環境では、メモリ領域は、WorkingメモリとMainメモリ領域に分けて管理されます。このプロセスで同期が失敗した場合に発生する可能性のある問題は何であり、どの原則に対応できるかを専攻者レベルで理解できます。

CASとロックフリー

CPUレベルで提供されるCompare And Swap(CAS)コマンドを利用して、スイッチングオーバーヘッドのない高性能同期技術を学びます。さらに、Lock-free Queue構造を直接実装して制御できます。

ジェネリックとコレクションフレームワーク

ADTを超えてデータ型への依存性を極端に下げたジェネリックについて学びます。このジェネリックを利用して再利用性が最大化されたクラスを作成でき、コレクションフレームワークにもきちんと活用できます。

※ここでちょっと! JVMとは?
Java Virtual Machine(JVM)は、Javaプログラムをコンピュータで実行するのに役立つ仮想マシンです。

学習対象


コードだけがうんざりしている
頭の中に残るものがないと感じたプログラミング入門者


バックエンド開発者として
就職したい就職準備生


たくさん書く言語だから
学んだが本質がよく分からない
1~2年目ジュニア開発者

学習ロードマップ🏃🏻

ひどく始まるJavaシリーズは合計4つのPartから成ります。
別途1,2講義は、Springバックエンド開発者として成長するために一緒に聞くと良い講義です🙂

  • Part 1: 基本的な文法、手続き型プログラミング

  • パート2:オブジェクト指向プログラミング+データ構造

  • Part 3: システム活用プログラムの作成

  • パート4:Spring Frameworkに進むための準備

  • 別途1:Webインフラストラクチャ技術の理解とDB

  • 別途 2: SQL 拡張


パート3は、マルチスレッドプログラミングと同期技術、CAS(Compare And Swap、Set)、ロックフリー構造、ファイル入出力、ソケットプログラミングなどの高度な開発者になるために知っておくべきことが多数含まれています。扱う内容が多すぎるため、上下に区分されており、上編ではJava Memory ModelとJVMに対する理解を基にマルチスレッドベースのプログラミング手法を深く扱っています。

スレッド同期に関するさまざまな文法がJVM内部でどのような原理で動作するかを具体的に学ぶことができ、競争条件下で発生する可能性のある様々な異常現象や論理エラーに対応できる確かな基盤を整えることができます。

この講義を聞いたら...

  • マルチスレッド環境に関して、Java Virtual Machine(JVM)とJava Memory Model(JMM)がどのように機能するかを理解することができます。これを基に、同期失敗による問題に直接対応できる実力を備えることができます。

  • synchronized予約語が持っている基本的な動作原理を JVM とともに知ることができ、Monitor lock について単純な用語ではなく原理の観点から理解できます。

  • 高性能入/出力システムを実装するために必ず知る必要があるCAS(Compare And Swap、Compare And Set)を利用してSpin lockを実装する方法Lock-freeベースのQueueを自ら実装して活用できます。これは中・高級プログラミング技法でCS専攻者すら容易に近づけないものです。

  • ジェネリック文法とマルチスレッド環境でコレクションフレームワークを適切に使用する方法を学びます。

ひどく始まるJavaは
ただJava講義ではありません。

1⃣
マルチスレッド環境
必要な理由


  • Threadクラスを使用することでマルチスレッド環境を作成する方法とともに、なぜマルチスレッド環境が必要なのかを説明します。

  • GUIベースのアプリケーションの一般的な構造であるEvent-loop構造にマルチスレッドを適用する具体的な例として、関連理論を説明します。

  • また、競争条件を誘発するデータ構造が存在することになる理由についても学びます。


2⃣
同期に関するJVM
内部とロックフラグ


  • synchronizedを含むロックベースの同期技術を使用すると、JVM内で何が起こるかを具体的に知ることができます。

  • OSレベルで提供するカーネルオブジェクトが使用されている場合とそうでない場合などを区別したときにどのようなパフォーマンス向上が期待できるのかがわかります。

3⃣
Java Memory Modelで
理解するメモリ同期問題


  • JMM(Java Memory Model)について理解し、どのような動作機能があるかを学びます。

  • 各スレッドが独立して使用するWorking Memory領域とJVM全体に適用されるMain Memory間の同期の問題が発生すると、どのような現象が発生するかがわかります。

  • メモリ領域間の同期が起こる具体的なタイミングと理由を知り、適切なコードを書くことができます。

4⃣
整理された教育資料と板書📜


  • すべての授業内容はPPT資料に基づいていますが、まるでホワイトボードに板書をするかのように説明が続きます。

  • これにより、受講者は完成した1つの結果だけを見るのではなく、構造が誕生した背景と理由全体の流れを総合的に理解することができます。

5⃣
目標は差別化された競争力と就職です💼

  • 本格的なJavaプログラミングを学ぶ前に、この授業が就職を目指していることを明確に伝えます。そして

    講師の長年の経験を踏まえ、明確な学習ロードマップと所要時間を提示します。

  • 間違った選択で時間を無駄にすることがないように、最初から適切な学習配分とスケジュールを確立するように誘導します。

6⃣
各種技法別具体的
性能比較結果提供


  • マルチスレッド環境で考慮する必要がある同期の問題とスイッチングオーバーヘッドの深さについて説明します。

  • 同じ環境でさまざまな同期技術を適用したときのパフォーマンスの違いが具体的な数値で表示されます。

  • 高性能ロックフリー構造を適用しても、むしろ効率が急減する状況を直接体験することができます。

7⃣
スピンロックと

ロックフリー構造の直接実装 🛠


  • 高性能システムを構築するために必要なCompare And Swap、SET(CAS)コマンドを使用して、スイッチングなしでスレッドを同期する方法を学びます。

  • Lock-free Queueを直接実装し、さまざまな状況変化を適用して、どのようなパフォーマンス変化が発生するかを実験を通じて知ることができます。

練習環境

  • オペレーティングシステムとバージョン(OS): Windows 11

  • 使用ツール: IntelliJ IDEA 2024.2.3 (Community Edition)

  • PC仕様:Windows 11 OSとIntelliJが無理なく動作できるレベル

学習資料

  • 授業に使用されたPPT資料(PDFファイルで提供)

  • 完全な例と必須の練習問題正解(Zip圧縮ファイルとして提供)

選手の知識と注意事項

  • 「基礎タンタン」はじめて始まるJava Part 1~2
    (※基本的な文法やOOPについてすべて知っていると仮定する)


こんな方に
おすすめです

学習対象は
誰でしょう?

  • 就職市場で差別化された競争力を得たい初級Java開発者

  • JVMの内部構造を基に深くJavaを学びたい方

  • Javaメモリモデルとマルチスレッド環境について深い理解を得たい方

  • 中級~上級Javaプログラミングのテクニックを学びたい方

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

  • 厳しく始めるJava Part 2レベルのJVM内部構造の理解

  • Javaプログラミング

こんにちは
です。

37,006

受講生

2,151

受講レビュー

1,098

回答

4.9

講座評価

24

講座

널널한 개발자 TV 채널 주인장이자
30년 넘게 IT기술의 바다를 항해하고 있는 개발자 입니다.  반갑습니다. ^^  

カリキュラム

全体

51件 ∙ (10時間 11分)

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

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

受講レビュー

全体

23件

5.0

23件の受講レビュー

  • 별다방님의 프로필 이미지
    별다방

    受講レビュー 13

    平均評価 4.5

    5

    71% 受講後に作成

    기다리던 part3 강의입니다. 기다린 보람이 있네요. 양질의 강의 감사합니다. 후딱 듣고 part3-2편 기대하겠습니다!

    • 널널한 개발자
      知識共有者

      좋은 평가와 피드백 고맙습니다. 얼른 하편 준비하겠습니다. :)

  • wkdtl345님의 프로필 이미지
    wkdtl345

    受講レビュー 8

    平均評価 5.0

    5

    100% 受講後に作成

  • 이성혁님의 프로필 이미지
    이성혁

    受講レビュー 8

    平均評価 5.0

    5

    31% 受講後に作成

  • 최우석님의 프로필 이미지
    최우석

    受講レビュー 1

    平均評価 5.0

    5

    31% 受講後に作成

  • 백수취준생님의 프로필 이미지
    백수취준생

    受講レビュー 36

    平均評価 4.8

    5

    100% 受講後に作成

¥9,036

nullnull8537の他の講座

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

似ている講座

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