[AS]Threadでのjoin()について
以下のように書くとエラーだった。
1個の関数内で、ParallelExecutorを2個作る。例えばa,b。
function test(){ a:ParallelExecutor = new ParallelExecutor(); b:ParallelExecutor = new ParallelExecutor(); ~省略~ a.start(); a.join(); b.start(); b.join(); }
b.join()をコメントアウトするので動くので、1個の関数内で複数joinはダメぽ。
また↓のように関数分けて、next()で移動してもOK(当然か)
function test(){ var a:ParallelExecutor = new ParallelExecutor(); ~省略~ a.start(); a.join(); next(test2); } function test2(){ var b:ParallelExecutor = new ParallelExecutor(); b.start(); b.join(); }
以下、偉人からのアドバイスメモ(今はまだ全理解しきれてない・・・)
joinのときは A.hoge() -> B.join() -> B.joinMonitor.wait() という感じでBを待つ状態。
Queue的なときはA.hoge() -> B.checkPoll() -> (データが鳴ければ)B.monitor.wait() で待ち状態。
それぞれ waitしようとしたときに、Aがすでに何かの待ちになっているとそれはエラー。
Threadはクラスメソッド内でいろいろしていて、どこかの処理でwaitが呼ばれたときに、呼び元(今動いてる)のThreadを待たせるといのが基本動作。
呼ばれた人が呼んだ人を状況により待たせるイメージ。
あるスレッドは同時に1つのスレッドしか待てない。
逆にあるスレッドを待ってるスレッドは何個でも待てる。
//2009/1/17追記
joint()とsleep()は同時に使えないみたい。
Tweet