最近の Flash や Flex では、外部データのやり取りをしない方が少ないと思います。特に、XML や、外部 SWF の読み込みは、必ずと言っていいほど行われます。
たとえば、複数の XML を順番に読み込んで、全ての読み込みが終わったら何か処理をする、という例を、ActionScript Thread Library を使って書くと、次のようになります。
import org.libspark.thread.Thread;
import org.libspark.thread.threads.net.URLLoaderThread;
import org.libspark.thread.utils.SerialExecutor;
public class LoadXMLsThread extends Thread
{
private var _loaders:SerialExecutor;
override protected function run():void
{
// みっつの XML を読み込む
_loaders = new SerialExecutor();
_loaders.addThread(new URLLoaderThread(new URLRequest('a.xml'));
_loaders.addThread(new URLLoaderThread(new URLRequest('b.xml'));
_loaders.addThread(new URLLoaderThread(new URLRequest('c.xml'));
_loaders.start();
_loaders.join();
next(loadComplete);
}
private function loadComplete():void
{
// 何か処理をする... ここでは XML の内容を出力
for (var i:uint = 0; i < _loaders.numThreads; ++i) {
trace(URLLoaderThread(_loaders.getThreadAt(i)).loader.data);
}
}
}
ここで、三つの新しいクラスが登場しています。
Thread クラスの start メソッドを呼び出すと、スレッドの実行が開始されます。
_loaders.start();
ここでは、SerialExecutor の実行が開始され、addThread されている、「a.xml」と「b.xml」と「c.xml」を読みにいく URLoaderThread が、順番に実行されます。
Thread クラスの join メソッドを呼び出すと、呼び出した先のスレッドの終了を待機して、next メソッドで指定したメソッドを終了後に呼び出すようになります。
_loaders.join(); next(loadComplete);
そのため、SerialExecutor の実行が終了 (= 全ての URLLoaderThread の読み込みが終了) すると、loadComplete メソッドが呼び出され、取得した XML の内容が出力されます。