何故にスレッドなど(マイコン)でやるのか?
- 1つのプログラムの中で,複数の処理の流れを実現 するための仕組み.
- UNIX, Windowsなどのマルチプロセスとは違い,
あくまで1つのプログラム中のことなので,
複数のスレッドで変数を共有できたりする.
-
Thread APIのマニュアル
- スレッドの作り方
- クラスThreadのサブクラスとして作る.
- 任意をクラスに
インタフェース Runnableを実装して,
そのインスタンスを引数としたスレッドを作成する.
- 並行にやらせたい処理内容は,
全て,run()メソッド内に書く.無論,他のサブメソッドを呼び出すのもOKだが,
スレッド自体のメインルーチンはrun()メソッドと考えてよい.
- スレッドの典型的な使い方
- スレッドのインスタンスを作る.
- スレッドインスタンスのstart()メソッドを呼んで,
スレッドを開始させる.
- 通常,run()メソッドはユーザーから呼ばない.
(無論,呼んでも良いが.)
run()メソッドの呼び出し,および休止はJVMの
タスクスケジュール管理に任される.
- 実際には並行っぽく動かない(涙) その理由と対策
- そもそも多くのマシンは,CPUが1つしかないので,
本当には並行には動かない.
- しかも,多くの処理は,CPUに割り当てられた時間に対して
十分に短い時間で済む場合が多いので,
ますます,複数の処理が混ぜこぜに実行される雰囲気を味わいにくい.
- CPUを複数もつ並列マシンで,
それぞれのマシンにスレッドを割る当てることが可能ならば,
実際に並行っぽく動く.
- 1CPUでも並行っぽく動かすには,
それぞれのスレッド命令列の一部に
「適当な時間待つ」命令を挿入して,
並行っぽさを演出する.
-
3つのスレッドが自分のIDを非同期に連続表示
〜 実行する毎に順序が変わる .
(ダウンロード)
- クイックソート:
例題の概要,
例題プログラムの解説.
(ダウンロード)
-
Javaスレッドの詳細は
ここなんぞ見ると良い.
スレッドの同期と排他制御
$Id: index.html,v 1.6 2001-04-16 08:58:28+09 kaiya Exp kaiya $