Packageorg.libspark.thread
Classpublic class Thread
InheritanceThread Inheritance Monitor
SubclassesCommandThread, EventDispatcherThread, Executor, Frocessing2DThread, Frocessing3DThread, LoaderThread, SoundLoaderThread, TweenerThread, URLLoaderThread

Thread クラスは ActionScript Thread Library 1.0 (そうめん) の核となるクラスで、擬似スレッドを実現します.

ここで実現される擬似スレッドは、タスクシステムと Java のスレッドモデルをベースとしています。 処理をいくつかのメソッドに切り分け、呼び出すメソッド (「実行関数」と呼びます) を切り替えつつ 順々に実行していくことで、処理を進めます。

新しいスレッドを作成するためには、まず Thread クラスのサブクラスを作成します。 このサブクラスは、 Thread クラスの run メソッドをオーバーライドする必要があります。 たとえば、「Hello, Thread!!」と出力するスレッドは、次のようになります。

public class HelloThread extends Thread
  {
      override protected function run():void
      {
          trace('Hello, Thread!!');
      }
  }

作成したスレッドを実行するためには、 Thread Library を初期化する必要があります。 次のように、 Thread クラスの静的メソッド initialize を呼び出すことで初期化を行います。 このとき、引数に IThreadExecutor インターフェイスの実装クラスのインスタンスを指定します。 この IThreadExecutor インスタンスは、「いつスレッドを実行するか」を決める重要な役割を担っています。 ここでは、 EnterFrameThreadExecutor クラスのインスタンスを渡し、フレーム実行のタイミングで スレッドが実行されるようにしています。初期化処理は、アプリケーションの最初で一度だけ行えば、その後呼び出す必要はありません。

Thread.initialize(new EnterFrameThreadExecutor());

最後に、次のように HelloThread クラスのインスタンスを作り、 start メソッドを呼び出すことで、 スレッドの実行を開始します。

var t:Thread = new HelloThread();
  t.start();

スレッドは親子関係を形成します。この親子関係は、スレッドの実行開始時に決定されます。 スレッドの start を呼び出したスレッド (つまりカレントスレッド) は、親スレッドとなり、 start が呼び出されたスレッドは、その親スレッドの子スレッドとなります。 ただし、 start の呼び出しがスレッドの外 (つまりカレントスレッドが null のとき) に行われた場合、 start が呼び出されたスレッドはトップレベルスレッドとなります。

スレッドの親子関係は、スレッドの実行順序と例外の伝播において重要になります。 スレッドの実行は、一番最初に開始されたトップレベルスレッドから始まります。今、このスレッドを A と呼ぶことにします。 A に子スレッドがいる場合、 A の実行よりも先にまず、子スレッドが、開始された順番で実行されます。 この子スレッドが実行されるとき、その子スレッドにさらに子スレッド (Aから見て孫スレッド) がいる場合、 その子スレッドの実行より先に孫スレッドが開始された順番で実行され、これが子スレッドがいなくなるまで続けられます。 全ての A の子スレッドの実行が終了すると、 A が実行され、次に、A の次に開始されたトップレベルスレッドの実行が 同様にして続きます。

スレッド内で例外が発生し、その例外が、例外が発生したスレッド内で捕捉されなかった場合、 例外は親スレッドに伝播します。例外が発生したのがトップレベルスレッドで、親スレッドがいない場合、 例外は uncaughtErrorHandler に渡されます。

子スレッドよりも先に親スレッドが終了した場合、その親スレッドの全ての子スレッドは孤児スレッドとなり、 トップレベルスレッドとして再配置されます。

スレッドはある時点で、以下のいずれかの状態を取ります。これらの値は ThreadState クラスで定義されており、 state プロパティを通して知ることができます。

スレッドが生成されると、まずはじめに状態は「NEW」に設定されます。この後、 start メソッドによって スレッドが開始されると、状態は「RUNNABLE」に設定されます。「NEW」以外の状態のスレッドを start メソッドによって 開始することはできません。

wait メソッド、 join メソッド等の呼び出しによってスレッドが待機状態になる場合、状態は「WAITING」に 設定されます。このとき、タイムアウトが設定されるか、sleep メソッドの呼び出しである場合、状態は「TIMED_WAITING」に 設定されます。待機状態が解除されると状態は元に戻ります。

スレッドが終了フェーズに移行すると、状態は「TERMINATING」に設定されます。スレッドが終了フェーズから 実行フェーズに戻ることは無く、同様に状態が「TERMINATING」から「RUNNABLE」に戻ることもありません。 終了フェーズが終わり、完全にスレッドが終了すると、状態は「TERMINATED」に設定されます。

スレッドの動作を視覚的に知りたい場合、以下の動作チャートを見ることをお勧めします。

See also

run()
initialize()
start()
uncaughtErrorHandler()
state
ThreadState
http://www.libspark.org/htdocs/as3/thread-files/behavior-chart.png


Public Properties
 PropertyDefined by
  className : String
[read-only] このスレッドのクラス名を返します.
Thread
  currentThread : Thread
[static][read-only] 現在実行中のスレッドを返します.
Thread
  id : uint
[read-only] このスレッドのユニークな識別子を返します.
Thread
  isInterrupted : Boolean
[read-only] このスレッドが割り込まれている場合は true、そうでない場合は false を返します.
Thread
  isReady : Boolean
[static][read-only] initialize メソッドの呼び出しによって IThreadExecutor が設定され、スレッドが実行可能な状態であれば true、そうでなければ false を返します.
Thread
  name : String
このスレッドの名前を設定します.
Thread
  state : uint
[read-only] このスレッドの状態を返します.
Thread
  uncaughtErrorHandler : Function
[static] どのスレッドにも捕捉されなかった例外のためのハンドラを設定します.
Thread
Public Methods
 MethodDefined by
  
新しい Thread クラスのインスタンスを生成します.
Thread
  
checkInterrupted():Boolean
[static] 現在のスレッドが割り込まれているかどうかを調べます.
Thread
  
error(klass:Class, func:Function, reset:Boolean = true):void
[static] 現在実行中のスレッドおよびその子スレッドで例外が発生した場合に実行する実行関数を設定します.
Thread
  
event(dispatcher:IEventDispatcher, type:String, func:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
[static] 現在実行中のスレッドが指定されたイベントが発生した場合に実行する実行関数を設定します.
Thread
  
[static] 全てのスレッドを実行します.
Thread
  
initialize(executor:IThreadExecutor):void
[static] スレッドライブラリを初期化します.
Thread
  
interrupt():void
このスレッドに割り込みます.
Thread
  
interrupted(func:Function):void
[static] 現在実行中のスレッドが待機中に割り込まれた場合に実行する実行関数を設定します.
Thread
  
join(timeout:uint = 0):Boolean
このスレッドが終了するまで、現在のスレッドを待機させます.
Thread
 Inherited
leave(thread:Thread):void
待機中に例外が発生した等の理由で、指定されたスレッドがこのモニタの待機セットから抜けることを伝えます.
Monitor
  
next(func:Function):void
[static] 現在実行中のスレッドが次に実行する実行関数を設定します.
Thread
 Inherited
notify():void
このモニターで待機中のスレッドを 1 つ再開します.
Monitor
 Inherited
notifyAll():void
このモニターで待機中のすべてのスレッドを再開します.
Monitor
  
sleep(time:uint):void
[static] 現在実行中のスレッドの実行を、指定された時間だけ中断させます.
Thread
  
start():void
スレッドを開始します.
Thread
  
timeout(func:Function):void
[static] 現在実行中のスレッドが待機中にタイムアウトした場合に実行する実行関数を設定します.
Thread
  
toString():String
このスレッドの文字列表現を返します.
Thread
 Inherited
wait(timeout:uint = 0):void
別のスレッドがこのモニターの notify メソッドまたは notifyAll メソッドを呼び出すか、指定された時間が経過するまで、現在のスレッドを待機させます.
Monitor
Protected Methods
 MethodDefined by
  
finalize():void
このメソッドをオーバーライドして、スレッドの終了処理を記述します.
Thread
  
formatName(name:String):String
このスレッドの名前を整形して返します.
Thread
  
run():void
このメソッドをオーバーライドして、スレッドの処理を記述します.
Thread
Property detail
classNameproperty
className:String  [read-only]

このスレッドのクラス名を返します.

デフォルトでは、 getQualifiedClassName メソッドを使用してクラス名を取得します。

Implementation
    public function get className():String
currentThreadproperty 
currentThread:Thread  [read-only]

現在実行中のスレッドを返します.

現在実行中のスレッドがない場合、 null を返します。

Implementation
    public static function get currentThread():Thread
idproperty 
id:uint  [read-only]

このスレッドのユニークな識別子を返します.

initialize メソッドが呼び出されない限り、ふたつのスレッドに同じ id が割り振られることはありません。

Implementation
    public function get id():uint
isInterruptedproperty 
isInterrupted:Boolean  [read-only]

このスレッドが割り込まれている場合は true、そうでない場合は false を返します.

このプロパティが true を返すようになるのは、待機状態でないスレッドに対して、 interrupt メソッドで割り込んだ場合です。

Implementation
    public function get isInterrupted():Boolean

See also

isReadyproperty 
isReady:Boolean  [read-only]

initialize メソッドの呼び出しによって IThreadExecutor が設定され、スレッドが実行可能な状態であれば true、そうでなければ false を返します.

Implementation
    public static function get isReady():Boolean

See also

nameproperty 
name:String  [read-write]

このスレッドの名前を設定します.

Implementation
    public function get name():String
    public function set name(value:String):void
stateproperty 
state:uint  [read-only]

このスレッドの状態を返します.

返される値は、 ThreadState クラスで定義されている定数のいずれかになります。

Implementation
    public function get state():uint

See also

uncaughtErrorHandlerproperty 
uncaughtErrorHandler:Function  [read-write]

どのスレッドにも捕捉されなかった例外のためのハンドラを設定します.

スレッド内で例外が発生し、処理されないままトップレベルまで到達するとこのハンドラが呼び出されます。

ここに登録する関数は、第一引数に発生した例外である Object と、第二引数に発生元のスレッドである Thread を引数としてとる必要があります。

Implementation
    public static function get uncaughtErrorHandler():Function
    public function set uncaughtErrorHandler(value:Function):void
Constructor detail
Thread()constructor
public function Thread()

新しい Thread クラスのインスタンスを生成します.

Method detail
checkInterrupted()method
public static function checkInterrupted():Boolean

現在のスレッドが割り込まれているかどうかを調べます.

このメソッドによりスレッドの「割り込みステータス」がクリアされます。 つまり、このメソッドが続けて2回呼び出された場合、2回目の呼び出しは false を返します。

Returns
Boolean — 現在のスレッドが割り込まれている場合は true、そうでない場合は false
error()method 
public static function error(klass:Class, func:Function, reset:Boolean = true):void

現在実行中のスレッドおよびその子スレッドで例外が発生した場合に実行する実行関数を設定します.

ここで設定される実行関数は、発生した例外である Object と、例外が発生したスレッドである Thread のふたつの引数をとる関数である必要があります。

この関数によって例外を処理できた (この関数内で再び例外が発生しなかった) 場合で、この関数内で next メソッドによる実行関数の設定が行われなかった場合、例外が発生する前の実行関数の設定を復元します。

この設定は、reset 引数が false に設定されない限り、スレッドの実行のたびにリセットされます。

Parameters
klass:Class — どの型の例外が発生した場合に関数を実行するかを示すクラス
 
func:Function — 例外が発生した際に実行される実行関数
 
reset:Boolean (default = true) — 次の実行のタイミングでこの設定を削除する場合には true、そうでなければ false
event()method 
public static function event(dispatcher:IEventDispatcher, type:String, func:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

現在実行中のスレッドが指定されたイベントが発生した場合に実行する実行関数を設定します.

ここで設定される実行関数は、発生したイベントである Event を引数にとる関数である必要があります。

このメソッドによってイベントハンドラが設定される場合、スレッドは自動的にイベントが発生するまで待機状態となります。 ただし、 next メソッドによって次に実行する実行関数が設定される場合、待機状態にはならず、実行が継続されます。

この設定は、スレッドの実行のたびにリセットされます。

Parameters
dispatcher:IEventDispatcher — イベントリスナーの登録先となるディスパッチャ
 
type:String — 捕捉するイベント名
 
func:Function — イベントが発生した場合に実行する実行関数
 
useCapture:Boolean (default = false) — flash.events.IEventDispatcher#addEventListener() の該当する引数を参照してください。
 
priority:int (default = 0) — flash.events.IEventDispatcher#addEventListener() の該当する引数を参照してください。
 
useWeakReference:Boolean (default = false) — flash.events.IEventDispatcher#addEventListener() の該当する引数を参照してください。

See also

flash.events.IEventDispatcher.addEventListener()
executeAllThreads()method 
public static function executeAllThreads():void

全てのスレッドを実行します.

通常、このメソッドは IThreadExector インターフェイスの実装クラスによって呼び出されます。

finalize()method 
protected function finalize():void

このメソッドをオーバーライドして、スレッドの終了処理を記述します.

スレッドが終了フェーズに移行すると、必ずこのメソッドが実行関数に設定され、スレッドが実行されます。 例外が発生したりした場合でも、必ず終了フェーズに移行するので、スレッドが終了する前にはこのメソッドが実行されることが 確実に保証されています。

このメソッドも実行関数と同じ扱いであるため、 next をはじめとするメソッドによってスレッドを制御することが可能です。

スレッドはこのメソッドを利用して終了処理を行い、いかなる状況でも安全に終了することを保証するべきです。

formatName()method 
protected function formatName(name:String):String

このスレッドの名前を整形して返します.

デフォルトでは、

'[' + className + ' ' + name + ']'

と等価な値が返されます。

このメソッドの呼び出し結果は、 toString メソッドなどで使用されます。

Parameters
name:String — スレッドの名前

Returns
String — 整形された名前
initialize()method 
public static function initialize(executor:IThreadExecutor):void

スレッドライブラリを初期化します.

このメソッドは、最初に一度だけ呼び出してください。

スレッドの実行は、指定された IThreadExecutor インスタンスによって行われます。 (このメソッド内で、 IThreadExectuor#start が呼び出されます)

Parameters
executor:IThreadExecutor — スレッドの実行を行う IThreadExecutor

See also

interrupt()method 
public function interrupt():void

このスレッドに割り込みます.

このスレッドが待機中である場合、割り込みステータスはクリアされ、スレッドが起床します。 このとき、割り込みハンドラが設定されていれば実行関数を割り込みハンドラに設定して実行を再開し、 そうでない場合は InterruptedError を発生させます。

待機中でない場合、このスレッドの割り込みステータスが設定されます。

interrupted()method 
public static function interrupted(func:Function):void

現在実行中のスレッドが待機中に割り込まれた場合に実行する実行関数を設定します.

このメソッドによって割り込みハンドラが設定されていない状態で、待機中に割り込みが発生すると、 例外 InterruptedError が発生します。

この設定はスレッドの実行のたびにリセットされます。

Parameters
func:Function — 待機中に割り込まれた場合に実行する実行関数
join()method 
public function join(timeout:uint = 0):Boolean

このスレッドが終了するまで、現在のスレッドを待機させます.

Parameters
timeout:uint (default = 0) — 待機させる時間 (ミリ秒)。 0 を指定した場合、永遠に待ち続けます

Returns
Boolean — 待機する必要がある場合は true、そうでない場合は false
next()method 
public static function next(func:Function):void

現在実行中のスレッドが次に実行する実行関数を設定します.

この設定は、スレッドの実行のたびにリセットされます。

このメソッドの呼び出しによって次に実行する実行関数が設定されない場合、スレッドは終了フェーズへと移行します。

Parameters
func:Function — 次に実行する実行関数
run()method 
protected function run():void

このメソッドをオーバーライドして、スレッドの処理を記述します.

start メソッドが呼び出され、スレッドの実行が開始されると、まずはじめにこのメソッドが実行関数として設定され、 スレッドが実行されます。

このメソッド内で next メソッドを呼び出すことにより、次の実行関数を設定することができます。 次の実行関数が設定されない場合、スレッドは終了フェーズへと移行します。

next メソッドのほか、 wait, join, sleep, event, timeout, error, interrupted といった メソッドを呼び出すことで、スレッドの動作を様々に制御することができます。

See also

sleep()method 
public static function sleep(time:uint):void

現在実行中のスレッドの実行を、指定された時間だけ中断させます.

指定された時間が経過すると、 sleep メソッドが呼び出されなかった場合と同様に実行が再開されます。

スレッドの実行が中断しても、子スレッドの実行が中断されることはありません。

Parameters
time:uint — 実行を中断させる時間 (ミリ秒)
start()method 
public function start():void

スレッドを開始します.

スレッドが既に開始されている場合 (state が NEW でない場合) は IllegalThreadStateError が スローされます。

スレッドライブラリが初期化されていない状態の場合 (isReady が false の場合) は ThreadLibraryNotInitializedError が スローされます。

あるスレッドの実行中にこのメソッドが呼び出された場合、そのスレッドはこのメソッドが呼び出されたスレッドの親スレッドとなり、 このメソッドが呼び出されたスレッドは子スレッドとなります。

スレッドが実行中で無い場合にこのメソッドが呼び出された場合、このメソッドが呼び出されたスレッドはトップレベルスレッドとなります。

このメソッドが呼び出されると、実行関数はまず run メソッドに設定されます。


Throws
IllegalThreadStateError — スレッドが既に開始されている場合
 
ThreadLibraryNotInitializedError — スレッドライブラリが初期化されていない場合
timeout()method 
public static function timeout(func:Function):void

現在実行中のスレッドが待機中にタイムアウトした場合に実行する実行関数を設定します.

この設定は、スレッドの実行のたびにリセットされます。

Parameters
func:Function — タイムアウトした場合に実行する実行関数
toString()method 
public function toString():String

このスレッドの文字列表現を返します.

デフォルトでは、 formatName メソッドを、このスレッドの名前を引数にして呼び出した結果です。

Returns
String — このスレッドの文字列表現