SlideShare a Scribd company logo
第1回 
Single Threaded Execution 
開発部 
てるー
マルチスレッドプログラムの安全性 
安全性とは、オブジェクトのフィールドが予想外の 
値をとらないことを意味する 
複数のスレッドが利用しても安全性が保たれるクラ 
スをスレッドセーフなクラスと呼ぶ
Single Threaded Execution パターンとは 
● 同時に1つのスレッドだけしか処理を実行できな 
いように制限を設けるパターン 
● 別の呼び方 
○ Critical Section 
○ Critical Region
登場人物 
● SharedResource 役 
○ 複数のスレッドからアクセスされるクラス 
○ もっているメソッドは以下の2つに分類される 
■ safeMethod 
■ unsafeMethod
safeMethod 
複数のスレッドから同時に呼び出しても、もともと 
問題のないメソッド
unsafeMethod 
複数のスレッドから同時に実行されると、インスタ 
ンスの状態が矛盾する恐れのあるメソッド
unsafeMethod 
複数のスレッドから同時に実行されると、インスタ 
ンスの状態が矛盾する恐れのあるメソッド 
複数のスレッドからアクセスされないようにガード 
する必要がある
解決法 
unsafeMethod を、同時に1つのスレッドからしか 
アクセスできないようにガードする 
Java では、unsafeMethod を synchronized メソッ 
ドにすることでガードを実現する
どんなときに使うのか? 
● マルチスレッドのとき 
● 複数のスレッドからアクセスされるとき 
● 状態が変化する可能性があるとき 
● 安全性を保つ必要があるとき
デッドロック 
2つのスレッドが2つのロックを取り合い、互いに相 
手のスレッドがロックを解放するのを待つ現象。
Single Threaded Execution パターン 
がデッドロックを起こす条件 
1. 複数の SharedResource 役がある 
2. スレッドが、ある SharedResource 役のロックを取ったま 
ま、他の SharedResource 役のロックを取りに行く 
3. SharedResource 役のロックを取る順序が定まっていない
継承異常 
SharedResource 役のフィールドがサブクラスから 
アクセス可能になっている 
+ 
サブクラスにガードされていない unsafeMethod を 
作ってしまう 
= 
安全性が失われる
パフォーマンス 
Single Threaded Execution パターンは以下の理 
由により、パフォーマンスを低下させる 
● ロックの取得に時間がかかるため 
● スレッドの衝突によって待たされるため
お わ り

More Related Content

PDF
困った時のDev toolsの使い方(初心者向け)
PDF
レンダリングを意識したパフォーマンスチューニング
PDF
Chrome Developer Toolsを使いこなそう!
PDF
20150302 java8 第一回_ラムダ式(1)
PPTX
Effective Java 輪読会 項目77-78
PPTX
Effective Java 輪読会 項目74-75
PDF
JavaScript 勉強会 ― 変数・演算子・文
困った時のDev toolsの使い方(初心者向け)
レンダリングを意識したパフォーマンスチューニング
Chrome Developer Toolsを使いこなそう!
20150302 java8 第一回_ラムダ式(1)
Effective Java 輪読会 項目77-78
Effective Java 輪読会 項目74-75
JavaScript 勉強会 ― 変数・演算子・文

More from Appresso Engineering Team (20)

PDF
JavaScript 勉強会 ― 型と値
PPTX
Effective Java 輪読会 項目69-70追加
PPTX
Effective Java 輪読会 項目69-70
PPTX
Effective Java 輪読会 項目66-68
PPTX
Effective Java 輪読会 項目71-73
PPTX
Java Day Tokyo 2014 まとめ (chen)
PPTX
Effective Java 輪読会 項目63-65
PPTX
Effective Java 輪読会 項目60-62
PPTX
Effective java 輪読会 項目57-59
PPTX
Effective Java 輪読会 項目49-52
PPTX
Effective Java 輪読会 項目45-48
PPTX
Effective Java 輪読会 項目53-56
PPTX
Effective Java 輪読会 第7章 項目43-44
PDF
Effective Java 輪読会 第7章 項目41-42
PPTX
Effective Java 輪読会 第7章 項目38-40
PPTX
Effective Java 輪読会 第6章 項目35-37
PPTX
Effective java 輪読会 第6章 項目32-34
PPTX
Effective java 輪読会 第6章 項目30-31
PPTX
Effective java 輪読会 第5章 項目26-29
PPTX
Effective java 輪読会 第5章 項目23-25
JavaScript 勉強会 ― 型と値
Effective Java 輪読会 項目69-70追加
Effective Java 輪読会 項目69-70
Effective Java 輪読会 項目66-68
Effective Java 輪読会 項目71-73
Java Day Tokyo 2014 まとめ (chen)
Effective Java 輪読会 項目63-65
Effective Java 輪読会 項目60-62
Effective java 輪読会 項目57-59
Effective Java 輪読会 項目49-52
Effective Java 輪読会 項目45-48
Effective Java 輪読会 項目53-56
Effective Java 輪読会 第7章 項目43-44
Effective Java 輪読会 第7章 項目41-42
Effective Java 輪読会 第7章 項目38-40
Effective Java 輪読会 第6章 項目35-37
Effective java 輪読会 第6章 項目32-34
Effective java 輪読会 第6章 項目30-31
Effective java 輪読会 第5章 項目26-29
Effective java 輪読会 第5章 項目23-25
Ad

マルチスレッド デザインパターン ― Single Threaded Execution