SlideShare a Scribd company logo
Javaで学ぶデザパタ入門
マルチスレッド編
スキルウェンズデー輪読
鈴木雄登
アジェンダ
• スレッドとは
• スレッドの起動
• スレッドの一時停止
• スレッドの排他制御
• スレッドの協調
• マルチスレッドの評価
スレッド
• スレッド:複数の処理を同時に実行する場合の、処理の
分割の単位として、スレッドとプロセスがある
• スレッドには2種類ある
• シングルスレッド
• マルチスレッド
シングルスレッド
public class Main {
public static void main (String[] args) {
for (int i = 0; i < 10000; i++ ) {
System.out.print(“Good” + i + “!”);
}
}
}
メインスレッド
Good0!Good1!Good2! … Good9999!
このようにシーケンシャルに表示される
マルチスレッド
• 複数の処理を同時並行する処理に適している
• 例
• GUIのアプリケーション
• 時間がかかるIO処理
• 複数のクライアントとの処理
Javaでのスレッド
• runとstart
• run
• 新しく起動されるスレッドでの動作
• start
• メインスレッド上で新しいスレッドを呼び出す
実際の流れ
メインスレッド サブスレッド
start
run
サブスレッド
run
start
サブスレッド
run
start
スレッドの起動
• スレッドの起動については以下の2つの方法がある
• Threadのサブクラスを使う
• Runnableインターフェースの実装クラスを使う
ThreadとRunnableの違い
THREAD RUNNABLE
クラスか否か クラス インターフェース
継承、実装関係 Runnable 親なし
実装方法
Thread
作って
Runnable
て、
Thread
public SampleRunnable implements Runnable {
@Override
public void run() {
…
}
}
!
new Thread(new SampleRunnable).start();
public BaseThread extends Thread {
@Override
public void run() {
…
}
}
!
new BaseThread().start();
Threadのサブクラス
Runnableの実装クラス
スレッドの一時停止
• sleep
• Threadを止めるメソッド
• これだけ。
スレッドの排他制御
• 排他:自分の仲間以外の者すべてをしりぞけて受け入れな
いこと
• 排他制御:1つの共有資源にアクセスしている期間に複数の
スレッドが同時に入ることを防ぐこと
• なんで排他制御?
• 並列で処理→同じものを変更したら壊れる
• 同時に変更は一つまでに制御←排他制御
スレッドの排他制御
• syncronizedメソッド
• メソッドが対象
• syncronizedブロック
• ブロックが対象
syncronizedブロック
class Something {
public void method() {
synclonized(this) {
       hoge();
}
}
}
制御したいインスタンスを引
数に加える
このブロック内は
排他制御される
例)
スレッドの協調
• waitメソッド
• 待合室で待つ
• notifyメソッド
• 待合室に空いたことを伝える
マルチスレッドの評価
• 安全性(必須)
• オブジェクトを壊さないこと:フィールドが予想外の値を取らないか?
• 生存性(必須)
• 必要な処理が行われること:必要な処理が必ず行われるか?
• 再利用性
• クラスを再利用できること:クラスを再利用できるか?
• パフォーマンス
• 処理を高速・大量にできること
パフォーマンス
• スループット:単位時間あたりの処理数
• 応答性:要求を出してから反応が返るまでの時間
• キャパシティ:同時に処理できる数
• 効率、スケーラビリティ、デグラレーション etc...
問題
public BaseThread extends Thread {
@Override
public void run() {
Sysout(“test”);
}
}
!
BaseThread t = new Thread();
t.start();
try {
t.sleep(1000);
} catch (InterruptException e) {
}
1秒間スリープさせたいのですが、
以下のプログラムは誤っています。
どこでしょうか?

More Related Content

PDF
Database qpstudy-okuno
ODP
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
PDF
MySQLトラブル解析入門
PDF
Art of MySQL Replication.
PDF
MySQL Workbench 6.1 の紹介
PDF
MySQL Workbench をモデリングツールとして使ってみた
PDF
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
PDF
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06
Database qpstudy-okuno
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQLトラブル解析入門
Art of MySQL Replication.
MySQL Workbench 6.1 の紹介
MySQL Workbench をモデリングツールとして使ってみた
カジュアルにMySQL Clusterを使ってみよう@MySQL Cluster Casual Talks 2013.09
MySQL Cluster 7.4で楽しむスケールアウト @DB Tech Showcase 2015/06

More from Yuto Suzuki (20)

PPTX
5xx解消への道のり
PPTX
MySQLのインデックス入門
PPTX
Ad vol.2
PPTX
広告勉強会
PPTX
Mastering Bitcoin ~network~
PPTX
Aerospike基本のき
PPTX
いまさらAkkaStream
PPTX
Introduction of View Through Tracking
PPTX
エンジニアのためのマーケティング
PPTX
How to Build a Team
PPTX
プロダクトにおけるScala
PPTX
Do you like scala
PPTX
Re invent
PPTX
Slackから始めるChatOps
PPTX
大学の時の研究の話
PPTX
F.O.Xを支える技術
PPTX
Scala戦士を増やせ
PPTX
Recommend scala
PDF
スクラムに学ぶ開発の回し方
PDF
Breezeで始めるデータ分析
5xx解消への道のり
MySQLのインデックス入門
Ad vol.2
広告勉強会
Mastering Bitcoin ~network~
Aerospike基本のき
いまさらAkkaStream
Introduction of View Through Tracking
エンジニアのためのマーケティング
How to Build a Team
プロダクトにおけるScala
Do you like scala
Re invent
Slackから始めるChatOps
大学の時の研究の話
F.O.Xを支える技術
Scala戦士を増やせ
Recommend scala
スクラムに学ぶ開発の回し方
Breezeで始めるデータ分析
Ad

デザパタIntro