PowerPoint プレゼンテーション - NIPPON INSTITUTE of

アルゴリズムとデータ構
造演習(7月15日)
マルチスレッド
2015/10/1
1
スレッドのライフサイクル
誕生
start
準備完了
notify
持ち時間終了
notifyAll
yield
実行中
wait
I/O要求
sleep
待機
sleep時間終了
2015/10/1
I/O完了
ディスパッチ
休眠
実行終了
死亡
中断
2
スレッド作成 (1)

Threadクラスの拡張
class ThreadX extends Thread {
public void run() {
// スレッドの処理
}
}
2015/10/1
3
スレッド作成 (2)

Runnableインタフェースのの宣言
class RunnableY implements Runnable {
public void run() {
// スレッドの処理
}
}
2015/10/1
4
スレッドの起動 (1)

スレッドクラスの起動
Thread tx = new ThreadX();
tx.start();

スレッドクラスの起動
RunnableY ry = new RunnableY();
ThreadY ty = Thread(ry);
tx.start();
2015/10/1
5
スレッドの起動 (2)

Threadコンストラクタ
Thread ()
Thread (Runnable r)
Thread (Runnable r, String s)
Thread (String s)
2015/10/1
6
同期 (1)
時間
スレッドA
スレッドB
t0
t1
$0
残高照会
t2
$0
処理対象切り替え
t4
$10預け入れ
処理対象切り替え
t5
2015/10/1
$0
残高照会
t3
t6
残高
$10預け入れ
$0
$10
$10
$10
7
同期 (2)

生産者/消費者問題
生産者
消費者
共有変数
2015/10/1
8
同期 (3)
private int sharedInt = -1;
private boolean writeable = true;
public synchronized void setSharedInt(int value) {
while (!writeable) {
wait();
}
sharedInt = value;
writeable = false;
notify();
}
2015/10/1
9
ランダムキャラクターデモ

2015/10/1
アプレットなので、Runnableインタフェース
を使用
10