チェンジセット 729

差分発生行の前後
無視リスト:
コミット日時:
2008/06/28 23:16:04 (2 ヶ月前)
コミッタ:
yossy
ログメッセージ:

Thread: ドキュメント1.0

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trac/htdocs/as3/thread-files/document/index.html

    r708 r729  
    2525                  --  * スレッドの良さが伝わる何か 
    2626                  -- 
    27                   -- 説明が足りない, 誤字脱字, 意見要望等ありましたらフォーラムやチケットで。 
     27                  -- 説明が足りない, 誤字脱字, 意見要望, その他ツッコミ等ありましたらフォーラムやチケットで。 
    2828                  --   * http://forum.libspark.org/ 
    2929                  --   * http://www.libspark.org/newticket 
     
    3333        <body> 
    3434                <div id="header"> 
    35                         <h1>ActionScript Thread Library 1.0 (そうめん) ドキュメント</h1> 
     35                        <h1 id="thread-documentation">ActionScript Thread Library 1.0 (そうめん) ドキュメント</h1> 
    3636                        <hr /> 
    3737                </div> 
     
    4848                        <hr /> 
    4949                         
    50                         <h2>1. スレッドライブラリの導入</h2> 
    51                          
    52                         <h3>1-1. スレッドとは</h3> 
     50                        <h2 id="introduction">1. スレッドライブラリの導入</h2> 
     51                         
     52                        <h3 id="what-is-thread">1-1. スレッドとは</h3> 
    5353                         
    5454                        <p>はじめにこの処理をして、次にこの処理をして...、という処理の流れを「<strong>スレッド</strong> (Thread)」と呼びます。英単語の「Thread」には「糸」「縫い糸」「筋道」「脈絡」といった意味があります。</p> 
     
    6060                        できるだけイベントのことを考えずに同期的に処理を書ける機構を提供します。</p> 
    6161                         
    62                         <h3>1-2. インストール</h3> 
    63                          
    64                         <h4>1-2-1. Flash CS3 の場合 (mxp パッケージ)</h4> 
     62                        <h3 id="installation">1-2. インストール</h3> 
     63                         
     64                        <h4 id="installation-flashcs3">1-2-1. Flash CS3 の場合 (mxp パッケージ)</h4> 
    6565                         
    6666                        <ol> 
    6767                        <li><a href="http://www.adobe.com/jp/exchange/em_download/">Adobe Extensiton Manager</a> のインストールが済んでいない場合、インストールします。</li> 
    68                         <li>ActionScript Thread Library プロジェクトページの「<a href="">ダウンロード</a>」へ行き、使用している OS にあわせて、「thread-1.0-win.mxp」または「thread-1.0-mac.mxp」をダウンロードします。</li> 
     68                        <li>ActionScript Thread Library プロジェクトページの「<a href="http://www.libspark.org/wiki/Thread#download">ダウンロード</a>」へ行き、使用している OS にあわせて、「Thread-1.0-win.mxp」または「Thread-1.0-mac.mxp」をダウンロードします。</li> 
    6969                        <li>ダウンロードしたmxpを実行します。この時、FlashCS3のConfigurationディレクトリの場所(標準でWindowsは「C: /Program Files/Adobe/Adobe Flash CS3/ja/Configuration」Macは「/Applications/Adobe Flash CS3/Configuration」です)を聞かれますので選択してください。</li> 
    7070                        <li>インストールが無事完了すれば、Flash CS3 上のプロジェクトで ActionScript Thread Library (org.libspark.thread パッケージ) が使用可能になります。</li> 
    7171                        </ol> 
    7272                         
    73                         <h4>1-2-2. Flex Builder の場合 (swc パッケージ)</h4> 
     73                        <h4 id="installation-flexbuilder">1-2-2. Flex Builder の場合 (swc パッケージ)</h4> 
    7474                         
    7575                        <ol> 
    76                         <li>ActionScript Thread Library プロジェクトページの「<a href="">ダウンロード</a>」へ行き、「thread-1.0.swc」をダウンロードします。</li> 
     76                        <li>ActionScript Thread Library プロジェクトページの「<a href="http://www.libspark.org/wiki/Thread#download">ダウンロード</a>」へ行き、「Thread-1.0.swc」をダウンロードします。</li> 
    7777                        <li>Flex Builder 上で、ActionScript Thread Library を使用したいプロジェクトを開くか、作成します。</li> 
    7878                        <li>プロジェクトのプロパティを表示し、「ActionScript ビルドパス」内の「ライブラリパス」タブを開きます。</li> 
    79                         <li>「SWC の追加」ボタンをクリックし、表示されたダイアログ内で、ダウンロードした「thread-1.0.swc」を指定して追加します。</li> 
     79                        <li>「SWC の追加」ボタンをクリックし、表示されたダイアログ内で、ダウンロードした「Thread-1.0.swc」を指定して追加します。</li> 
    8080                        <li>「OK」ボタンを押して設定を保存すれば完了です。設定したプロジェクトで ActionScript Thread Library (org.libspark.thread パッケージ) が使用可能になります。</li> 
    8181                        </ol> 
    8282                         
    83                         <h4>1-2-3. Flash Develop の場合 (swc パッケージ)</h4> 
     83                        <h4 id="installation-flashdevelop">1-2-3. Flash Develop の場合 (swc パッケージ)</h4> 
    8484                         
    8585                        <ol> 
    86                         <li>ActionScript Thread Library プロジェクトページの「<a href="">ダウンロード</a>」へ行き、「thread-1.0.swc」をダウンロードします。</li> 
     86                        <li>ActionScript Thread Library プロジェクトページの「<a href="http://www.libspark.org/wiki/Thread#download">ダウンロード</a>」へ行き、「Thread-1.0.swc」をダウンロードします。</li> 
    8787                        <li>Flash Develop 上で、ActionScript Thread Library を使用したいプロジェクトを開くか、作成します。</li> 
    8888                        <li>プロジェクトのプロパティを表示し、「Compiler Options」タブを開きます。</li> 
    89                         <li>「SWC Libraries」の所に、ダウンロードした「thread-1.0.swc」を指定して追加します。</li> 
     89                        <li>「SWC Libraries」の所に、ダウンロードした「Thread-1.0.swc」を指定して追加します。</li> 
    9090                        <li>「OK」ボタンを押して設定を保存すれば完了です。設定したプロジェクトで ActionScript Thread Library (org.libspark.thread パッケージ) が使用可能になります。</li> 
    9191                        </ol> 
    9292                         
    93                         <h4>1-2-4. Flex SDK の場合 (swc パッケージ)</h4> 
     93                        <h4 id="installation-flexsdk">1-2-4. Flex SDK の場合 (swc パッケージ)</h4> 
    9494                         
    9595                        <ol> 
    96                         <li>ActionScript Thread Library プロジェクトページの「<a href="">ダウンロード</a>」へ行き、「thread-1.0.swc」をダウンロードします。</li> 
    97                         <li>コンパイル時に、「library-path」オプションを使用して、ダウンロードした「thread-1.0.swc」を追加します。このとき、「=」ではなく「+=」を使用することに注意して下さい。 
    98                         <pre class="code">mxmlc -library-path+=thread-1.0.swc MyApplication.as</pre></li> 
     96                        <li>ActionScript Thread Library プロジェクトページの「<a href="http://www.libspark.org/wiki/Thread#download">ダウンロード</a>」へ行き、「Thread-1.0.swc」をダウンロードします。</li> 
     97                        <li>コンパイル時に、「library-path」オプションを使用して、ダウンロードした「Thread-1.0.swc」を追加します。このとき、「=」ではなく「+=」を使用することに注意して下さい。 
     98                        <pre class="code">mxmlc -library-path+=Thread-1.0.swc MyApplication.as</pre></li> 
    9999                        <li>コンパイルするプロジェクト内で ActionScript Thread Library (org.libspark.thread パッケージ) が使用可能になります。</li> 
    100100                        </ol> 
    101101                         
    102                         <h4>1-2-5. その他の場合 (ソースアーカイブ)</h4> 
     102                        <h4 id="installation-src">1-2-5. その他の場合 (ソースアーカイブ)</h4> 
    103103                         
    104104                        <ol> 
    105                         <li>ActionScript Thread Library プロジェクトページの「<a href="">ダウンロード</a>」へ行き、「thread-1.0-src.zip」をダウンロードするか、 
     105                        <li>ActionScript Thread Library プロジェクトページの「<a href="http://www.libspark.org/wiki/Thread#download">ダウンロード</a>」へ行き、「Thread-1.0-src.zip」をダウンロードするか、 
    106106                        或は最新のソースコードを使用したい場合は、Subversion 経由で以下のコマンドを利用してリポジトリから直接ソースコードを取得します。 
    107107                        <pre class="code">$ svn co http://www.libspark.org/svn/as3/Thread/src</pre></li> 
     
    110110                        </ol> 
    111111                         
    112                         <h3>1-3. スレッドライブラリの初期化</h3> 
    113                          
    114                         <p>ActionScript Thread Library を使用するためには、まず最初に <a href="">Thread クラス</a>の <a href="">initialize メソッド</a>を呼び出してライブラリを初期化する必要があります。 
     112                        <h3 id="initialization">1-3. スレッドライブラリの初期化</h3> 
     113                         
     114                        <p>ActionScript Thread Library を使用するためには、まず最初に <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html">Thread クラス</a>の <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#initialize()">initialize メソッド</a>を呼び出してライブラリを初期化する必要があります。 
    115115                        特にが無ければ問題ドキュメントクラスのコンストラクタで初期化するのが良いでしょう。</p> 
    116116                         
     
    130130}</pre> 
    131131                         
    132                         <p><a href="">initialize メソッド</a>は、IThreadExecutor インターフェイスの実装クラスを引数に取ります。この設定は、「スレッドをいつ実行するか」を決める役割を持っています。 
    133                         詳しくは、「<a href="">2-5. スレッドの実行タイミングと IThreadExecutor</a>」で解説します。</p> 
     132                        <p><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#initialize()">initialize メソッド</a>は、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/IThreadExecutor.html">IThreadExecutor インターフェイス</a>の実装クラスを引数に取ります。この設定は、「スレッドをいつ実行するか」を決める役割を持っています。 
     133                        詳しくは、「<a href="#timing-of-thread-execution">2-6. スレッドの実行タイミングと IThreadExecutor</a>」で解説します。</p> 
    134134                         
    135135                        <p>もし、プロジェクトが複数の SWF ファイルに分割されている場合、それぞれの SWF ファイルのドキュメントクラスでライブラリの初期化をしてしまうと、意図しない挙動をすることがあります。 
    136                         これを防ぐために、既にライブラリが初期化済みかを表す <a href="">isReady プロパティ</a>を用いて、既にライブラリが初期化されていた場合は、初期化をしないようにして下さい。</p> 
     136                        これを防ぐために、既にライブラリが初期化済みかを表す <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#isReady">isReady プロパティ</a>を用いて、既にライブラリが初期化されていた場合は、初期化をしないようにして下さい。</p> 
    137137                         
    138138                        <pre class="code">public class MyDocumentClass extends MovieClip 
     
    148148                        <hr /> 
    149149                         
    150                         <h2>2. スレッドの使用</h2> 
    151                          
    152                         <h3>2-1. スレッドの作成</h3> 
    153                          
    154                         <p>スレッドを使うためには、まずスレッドを作らなければなりません。予め用意されているいくつかのスレッド (<a href="">URLLoaderThread クラス</a>や <a href="">TweenerThread クラス</a>) 
     150                        <h2 id="using-thread">2. スレッドの使用</h2> 
     151                         
     152                        <h3 id="creating-thraed">2-1. スレッドの作成</h3> 
     153                         
     154                        <p>スレッドを使うためには、まずスレッドを作らなければなりません。予め用意されているいくつかのスレッド (<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/threads/net/URLLoaderThread.html">URLLoaderThread</a> や <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/threads/tweener/TweenerThread.html">TweenerThread</a>) 
    155155                        を使用する場合でも、それ単体で使用する場合というのは稀で、ほとんどの場合、「<strong>そのスレッドを使うためのスレッド</strong>」を自分で書くことになります。</p> 
    156156                         
    157                         <p>独自のスレッドを書くためには、まず <strong><a href="">Thraed クラス</a>を継承したサブクラスを作成</strong>します。 
    158                         そして、<strong><a href="">run メソッド</a>をオーバーライドして処理を記述</strong>します。</p> 
     157                        <p>独自のスレッドを書くためには、まず <strong><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html">Thread クラス</a>を継承したサブクラスを作成</strong>します。 
     158                        そして、<strong><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>をオーバーライドして処理を記述</strong>します。</p> 
    159159                         
    160160                        <p>次の例では、実行すると「Hello」と出力する、MyThread というスレッドを作成しています。</p> 
     
    170170}</pre> 
    171171                         
    172                         <h3>2-2. スレッドの実行</h3> 
     172                        <h3 id="executing-thread">2-2. スレッドの実行</h3> 
    173173                         
    174174                        <p>スレッドを実行したい場合、まずはじめに、new 演算子を使用して実行したいスレッドのインスタンスを作成します。</p> 
     
    176176                        <pre class="code">var t:MyThread = new MyThread();</pre> 
    177177                         
    178                         <p>スレッドは、<strong>インスタンスを作成しただけでは実行されません</strong>。実行を開始したいタイミングで、 <a href="">start メソッド</a>を呼び出すことで、はじめて実行を開始します。</p> 
     178                        <p>スレッドは、<strong>インスタンスを作成しただけでは実行されません</strong>。実行を開始したいタイミングで、 <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>を呼び出すことで、はじめて実行を開始します。</p> 
    179179                         
    180180                        <pre class="code">t.start();</pre> 
    181181                         
    182                         <p><a href="">MyThread クラス</a>は実行すると「Hello」と出力するスレッドでしたので、start メソッドが呼び出されたあと、「Hello」と出力され、スレッドが終了します。</p> 
    183                          
    184                         <h3>2-3. 実行関数</h3> 
    185                          
    186                         <p>スレッドの実行が開始されると呼び出されるメソッドのことを、「<strong>実行関数</strong>」と呼びます。実行関数の中では、<a href="">next メソッド</a>を用いて、 
     182                        <p>MyThread クラスは実行すると「Hello」と出力するスレッドでしたので、start メソッドが呼び出されたあと、「Hello」と出力され、スレッドが終了します。</p> 
     183                         
     184                        <h3 id="execution-function">2-3. 実行関数</h3> 
     185                         
     186                        <p>スレッドの実行が開始されると呼び出されるメソッドのことを、「<strong>実行関数</strong>」と呼びます。実行関数の中では、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#next()">next メソッド</a>を用いて、 
    187187                        <strong>次に実行する実行関数</strong>を設定することができ、スレッドの実行は<strong>実行関数が設定される限り継続</strong>します。</p> 
    188188                         
    189                         <p><a href="">run メソッド</a>をオーバーライドして処理を記述したことからも分かるように、実行関数はまずはじめに <a href="">run メソッド</a>に設定されます。 
    190                         次の例では、<a href="">run メソッド</a>の中で <a href="">next メソッド</a>を用いて、world メソッドを次の実行関数に設定しています。</p> 
     189                        <p><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>をオーバーライドして処理を記述したことからも分かるように、実行関数はまずはじめに <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>に設定されます。 
     190                        次の例では、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>の中で <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#next()">next メソッド</a>を用いて、world メソッドを次の実行関数に設定しています。</p> 
    191191                         
    192192                        <pre class="code">public class MyThread extends Thread 
     
    206206}</pre> 
    207207 
    208                         <p>このスレッドを実行すると、まずはじめに最初の実行関数である <a href="">run メソッド</a>が呼び出されて「Hello」が出力され、 
     208                        <p>このスレッドを実行すると、まずはじめに最初の実行関数である <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>が呼び出されて「Hello」が出力され、 
    209209                        続いて、次の実行関数である world メソッドが呼び出されて「, World!」が出力され、スレッドの実行が終了します。</p> 
    210210                         
    211211                        <p>実行関数が次々に呼び出されるというこの仕組みが、ActionScript Thread Library の最も基本的で大事な部分です。 
    212                         <a href="">next メソッド</a>の他にも様々なメソッドが用意されており、それを使用することで、スレッドの動作をより細かく制御することができるようになります。 
    213                         詳しくは、「<a href="">2-5. スレッドの待機</a>」や「<a href="">4. スレッドの制御</a>」で解説します。</p> 
    214                          
    215                         <h3>2-4. 複数のスレッドの実行</h3> 
     212                        <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#next()">next メソッド</a>の他にも様々なメソッドが用意されており、それを使用することで、スレッドの動作をより細かく制御することができるようになります。 
     213                        詳しくは、「<a href="#waiting-thread">2-5. スレッドの待機</a>」や「<a href="#controling-thread">4. スレッドの制御</a>」で解説します。</p> 
     214                         
     215                        <h3 id="executing-multiple-threads">2-4. 複数のスレッドの実行</h3> 
    216216                         
    217217                        <p>ActionScript Thread Library は擬似的なマルチスレッドを実現するライブラリですので、もちろん同時に複数のスレッドを実行することが出来ます。 
    218                         複数のスレッドを実行するには、実行したい分だけスレッドのインスタンスを作り、それぞれの <a href="">start メソッド</a>を呼び出して実行を開始します。 
    219                         ひとつのスレッドのインスタンスに対して、<a href="">start メソッド</a>を複数回呼び出すことは出来ないので注意して下さい。</p> 
     218                        複数のスレッドを実行するには、実行したい分だけスレッドのインスタンスを作り、それぞれの <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>を呼び出して実行を開始します。 
     219                        ひとつのスレッドのインスタンスに対して、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>を複数回呼び出すことは出来ないので注意して下さい。</p> 
    220220                         
    221221                        <p>実行が開始されたスレッドは、そのスレッドが終了するまで、他のスレッドの干渉や影響を受けることなく、実行を続けます。</p> 
     
    2742746</pre> 
    275275                         
    276                         <h3>2-5. スレッドの待機</h3> 
     276                        <h3 id="waiting-thread">2-5. スレッドの待機</h3> 
    277277                         
    278278                        <p>スレッドには、ある特定の状態になるまで、実行を中断して待機するための機能が存在します。実行を中断する、とは「<strong>実行関数の呼び出しを止める</strong>」ということで、 
    279279                        このような状態を「<strong>待機状態</strong>」と呼びます。</p> 
    280280                         
    281                         <p>スレッドを待機させるメソッドはいくつかありますが、最も簡単な例が <a href="">sleep メソッド</a>です。 
     281                        <p>スレッドを待機させるメソッドはいくつかありますが、最も簡単な例が <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#sleep()">sleep メソッド</a>です。 
    282282                        このメソッドは、指定された時間が経過するまでスレッドの実行を中断して待機させます。</p> 
    283283                         
    284                         <p>次の例では、「Hello」と出力したあと、<a href="">sleep メソッド</a>を用いて 1 秒間待機し、「World」を出力します。</p> 
     284                        <p>次の例では、「Hello」と出力したあと、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#sleep()">sleep メソッド</a>を用いて 1 秒間待機し、「World」を出力します。</p> 
    285285                         
    286286                        <pre class="code">public class MyThread extends Thread 
     
    302302}</pre> 
    303303 
    304                         <p>注意しなければならないのは、<strong><a href="">sleep メソッド</a>を呼び出したその時点でコードの実行が中断されるわけではない</strong>ということです。 
    305                         それではいつ実行が中断されるかというと、<strong>今実行中の実行関数 (ここでは <a href="">run メソッド</a>) の処理が全て終わった時にはじめて中断され、 
     304                        <p>注意しなければならないのは、<strong><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#sleep()">sleep メソッド</a>を呼び出したその時点でコードの実行が中断されるわけではない</strong>ということです。 
     305                        それではいつ実行が中断されるかというと、<strong>今実行中の実行関数 (ここでは <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>) の処理が全て終わった時にはじめて中断され、 
    306306                        ある状態になるまで (ここでは 1 秒経過するまで) 、次の実行関数の実行が遅延されます</strong>。</p> 
    307307                         
    308                         <p>すなわち、上の例では、<a href="">sleep メソッド</a>が呼び出されたあと、<a href="">next メソッド</a>によって次の実行関数 (world メソッド) が設定された上で、 
     308                        <p>すなわち、上の例では、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#sleep()">sleep メソッド</a>が呼び出されたあと、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#next()">next メソッド</a>によって次の実行関数 (world メソッド) が設定された上で、 
    309309                        待機状態に移行して実行を中断し、1 秒経過するのを待って実行を再開し、次の実行関数である world メソッドが呼び出される、という流れになります。</p> 
    310310                         
    311311                        <p>このように、ActionScript Thread Library では、途中にスレッドの待機が入る場合に、 
    312                         <strong>待機後の処理を書きたい場合は、実行関数を分割して <a href="">next メソッド</a>で設定するのが定石</strong>となりますのでよく覚えておいて下さい。</p> 
    313                          
    314                         <p><a href="">sleep メソッド</a>以外のメソッドについては、「<a href="">4. スレッドの制御</a>」や「<a href="">5. モニタ機構</a>」で解説します。</p> 
    315                          
    316                         <h3>2-6. スレッドの実行タイミングと IThreadExecutor</h3> 
     312                        <strong>待機後の処理を書きたい場合は、実行関数を分割して <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#next()">next メソッド</a>で設定するのが定石</strong>となりますのでよく覚えておいて下さい。</p> 
     313                         
     314                        <p><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#sleep()">sleep メソッド</a>以外のメソッドについては、「<a href="#controling-thread">4. スレッドの制御</a>」や「<a href="#monitor-system">5. モニタ機構</a>」で解説します。</p> 
     315                         
     316                        <h3 id="timing-of-thread-execution">2-6. スレッドの実行タイミングと IThreadExecutor</h3> 
    317317                         
    318318                        <img class ="figure" src="img/thread-execution.png" alt="" width="300" height="350" /> 
    319319                         
    320320                        <p>スレッドを使いこなすためには、<strong>実行関数が実行されるタイミング</strong>というものを、ある程度意識する必要があります。 
    321                         これには、「<a href="">1-3. スレッドライブラリの初期化</a>」でも出てきた、<a href="">IThreadExecutor インターフェイス</a>の実装クラスが深く関わっています。</p> 
    322                          
    323                         <p>ActionScript Thread Library には、標準で <a href="">EnterFrameThreadExecutor</a> と <a href="">IntervalThreadExecutor</a> というふたつの IThreadExecutor インターフェイス実装クラスが用意されています。 
     321                        これには、「<a href="#initialization">1-3. スレッドライブラリの初期化</a>」でも出てきた、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/IThreadExecutor.html">IThreadExecutor インターフェイス</a>の実装クラスが深く関わっています。</p> 
     322                         
     323                        <p>ActionScript Thread Library には、標準で <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/EnterFrameThreadExecutor.html">EnterFrameThreadExecutor</a> と <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/IntervalThreadExecutor.html">IntervalThreadExecutor</a> というふたつの <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/IThreadExecutor.html">IThreadExecutor インターフェイス</a>実装クラスが用意されています。 
    324324                        これらはそれぞれ、「<strong>フレーム実行のタイミング (Event.ENTER_FRAME のタイミング)</strong>」と「<strong>指定された時間の間隔のタイミング</strong>」で、 
    325325                        <strong>その時点までに開始されている全てのスレッドの実行関数を呼び出す</strong>クラスです。</p> 
     
    327327                        <p>たとえば、初期化時に EnterFrameThreadExecutor を指定していて、スレッド A とスレッド B が開始されている場合、フレームが実行される (Event.ENTER_FRAME が発生する) 度に、スレッド A とスレッド B の実行関数が呼び出されることになります。</p> 
    328328                         
    329                         <p>実行関数が呼び出される順番は、<strong>スレッドが開始された順</strong>です。ただし、スレッドに親子関係がある場合は、それが考慮されます。詳しくは「<a href="">3-2. 親子関係のあるスレッドの実行順序</a>」で解説します。</p> 
     329                        <p>実行関数が呼び出される順番は、<strong>スレッドが開始された順</strong>です。ただし、スレッドに親子関係がある場合は、それが考慮されます。詳しくは「<a href="#execution-order-of-thread-hierarchy">3-2. 親子関係のあるスレッドの実行順序</a>」で解説します。</p> 
    330330                         
    331331                        <p>このように、ActionScript Thread Library では、<strong>スレッドの実行タイミングと実行順序は完全に決まっており</strong>、本当のマルチスレッドのように、 
    332332                        実行されるタイミングや、実行される順序が不定ということはありません。</p> 
    333333                         
    334                         <h3>2-7. 現在のスレッド</h3> 
    335                          
    336                         <p>あるスレッドの実行関数が実行されているとき、そのスレッドは「<strong>現在実行されているスレッド</strong> (現在のスレッド)」として <a href="">currentThread プロパティ</a>に設定されます。 
    337                         スレッドの実行関数内で <a href="">currentThread プロパティ</a>を参照したとき、それは必ず自分自身 (this) になります。</p> 
    338                          
    339                         <p>どのスレッドの実行関数も実行されていない、つまり現在実行されているスレッドが無い場合は、<a href="">currentThread プロパティ</a>は null を返します。</p> 
    340                          
    341                         <p>「現在のスレッド」は、<a href="">next メソッド</a>をはじめとする、<a href="">Thread クラス</a>に静的 (static) なメソッドとして定義されているいくつかのメソッド呼び出しに於いて重要な意味を持ちます。 
     334                        <h3 id="current-thread">2-7. 現在のスレッド</h3> 
     335                         
     336                        <p>あるスレッドの実行関数が実行されているとき、そのスレッドは「<strong>現在実行されているスレッド</strong> (現在のスレッド)」として <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#currentThread">currentThread プロパティ</a>に設定されます。 
     337                        スレッドの実行関数内で <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#currentThread">currentThread プロパティ</a>を参照したとき、それは必ず自分自身 (this) になります。</p> 
     338                         
     339                        <p>どのスレッドの実行関数も実行されていない、つまり現在実行されているスレッドが無い場合は、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#currentThread">currentThread プロパティ</a>は null を返します。</p> 
     340                         
     341                        <p>「現在のスレッド」は、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#next()">next メソッド</a>をはじめとする、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html">Thread クラス</a>に静的 (static) なメソッドとして定義されているいくつかのメソッド呼び出しに於いて重要な意味を持ちます。 
    342342                        これらのメソッドは、「現在のスレッド」に対して設定をするようになっており、すなわちそれ以外のスレッドからは設定が出来ないようになっています。</p> 
    343343                         
    344                         <p>たとえば、スレッド A とスレッド B が実行されているときに、スレッド B の実行関数から、スレッド A の <a href="">next メソッド</a>を呼び出して、スレッド A の次の実行関数を変更する、といったことは出来ません。</p> 
     344                        <p>たとえば、スレッド A とスレッド B が実行されているときに、スレッド B の実行関数から、スレッド A の <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#next()">next メソッド</a>を呼び出して、スレッド A の次の実行関数を変更する、といったことは出来ません。</p> 
    345345                         
    346346                        <p>外部のスレッドによって意図せずスレッドの動作が変えられてしまわないように、このような設計になっています。</p> 
    347347                         
    348                         <h3>2-8. スレッドの終了処理</h3> 
     348                        <h3 id="finalization">2-8. スレッドの終了処理</h3> 
    349349                         
    350350                        <p>スレッドは、常に安全に終了することが求められます。たとえば、スレッドを実行する中で確保されたリソースがあれば、それはスレッドが終了する時にはきちんと解放されていることが望ましいでしょう。</p> 
    351351                         
    352                         <p>このような終了処理を確実に行うために、ActionScript Thread Library には <a href="">finalize メソッド</a>が用意されています。 
     352                        <p>このような終了処理を確実に行うために、ActionScript Thread Library には <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#finalize()">finalize メソッド</a>が用意されています。 
    353353                        これは、「<strong>終了処理を行うための実行関数</strong>」です。</p> 
    354354                         
    355                         <p>次に実行する実行関数が設定されなかった場合、スレッドはそのまま終了するのではなく、実際には <a href="">finalize メソッド</a> を次の実行関数に設定して実行し、 
    356                         そこで次に実行する実行関数が設定されなかった場合に、本当に終了します。<a href="">finalize メソッド</a>は、例外が発生した場合でも実行されることが保証されているので、 
    357                         確実に終了処理を行うことが出来ます (例外については「<a href="">7. 例外</a>」で解説します)。</p> 
    358                          
    359                         <p>次の例では、<a href="">finalize メソッド</a>を用いて、スレッドの実行中に確保した BitmapData が確実に解放されるようにしています。 
    360                         実行関数 something の実行が終了すると、自動的に <a href="">finalize メソッド</a>が呼び出されます。</p> 
     355                        <p>次に実行する実行関数が設定されなかった場合、スレッドはそのまま終了するのではなく、実際には <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#finalize()">finalize メソッド</a> を次の実行関数に設定して実行し、 
     356                        そこで次に実行する実行関数が設定されなかった場合に、本当に終了します。<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#finalize()">finalize メソッド</a>は、例外が発生した場合でも実行されることが保証されているので、 
     357                        確実に終了処理を行うことが出来ます (例外については「<a href="#exceptions">7. 例外</a>」で解説します)。</p> 
     358                         
     359                        <p>次の例では、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#finalize()">finalize メソッド</a>を用いて、スレッドの実行中に確保した BitmapData が確実に解放されるようにしています。 
     360                        実行関数 something の実行が終了すると、自動的に <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#finalize()">finalize メソッド</a>が呼び出されます。</p> 
    361361                         
    362362                        <pre class="code">public class MyThread extends Thread 
     
    384384}</pre> 
    385385                         
    386                         <p><a href="">run メソッド</a>からはじまる実行関数の実行の流れを「<strong>実行フェーズ</strong>」と呼び、実行フェーズが終了した後の、 
    387                         <a href="">finalize メソッド</a>からはじまる実行関数の実行の流れを「<strong>終了フェーズ</strong>」と呼びます。 
     386                        <p><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>からはじまる実行関数の実行の流れを「<strong>実行フェーズ</strong>」と呼び、実行フェーズが終了した後の、 
     387                        <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#finalize()">finalize メソッド</a>からはじまる実行関数の実行の流れを「<strong>終了フェーズ</strong>」と呼びます。 
    388388                        終了フェーズが終了すると、スレッドは終了します。スレッドが終了フェーズから実行フェーズに戻ることはありません。</p> 
    389389                         
    390                         <h3>2-9. スレッドの状態</h3> 
     390                        <h3 id="state-of-thread">2-9. スレッドの状態</h3> 
    391391                         
    392392                        <img class="figure" src="img/state-chart.gif" alt="" width="300" height="450" /> 
    393393                         
    394                         <p>スレッドはある時点で、以下のいずれかの状態を取ります。これらの値は <a href="">ThreadState</a> クラスで定義されており、実際の状態は <a href="">state プロパティ</a>を通して知ることが出来ます。</p> 
     394                        <p>スレッドはある時点で、以下のいずれかの状態を取ります。これらの値は <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/ThreadState.html">ThreadState クラス</a>で定義されており、実際の状態は <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#state">state プロパティ</a>を通して知ることが出来ます。</p> 
    395395                         
    396396                        <ul> 
     
    403403                        </ul> 
    404404                         
    405                         <p>スレッドが生成されると、まずはじめに、状態は「NEW」に設定されます。このあと、<a href="">start メソッド</a>によってスレッドが開始されると、状態は「RUNNABLE」に設定され、実行フェーズとなります。 
    406                         「NEW」以外の状態のスレッドを <a href="">start メソッド</a>によって開始することはできず、万が一 <a href="">start メソッド</a>を呼び出してしまった場合、 <a href="">IllegalThreadStateError</a> 例外がスローされます。</p> 
    407                          
    408                         <p><a href="">wait メソッド</a>、<a href="">join メソッド</a>等の呼び出しによってスレッドが待機状態になる場合 (詳しくは「<a href="">4. スレッドの制御</a>」を参照してください) 状態は「WAITING」に設定されます。 
    409                         このとき、制限時間が設定されるか、または<a href="">sleep メソッド</a>の呼び出しであった場合、状態は「TIMED_WAITING」に設定されます。待機状態が解除されると、状態は元に戻ります。</p> 
     405                        <p>スレッドが生成されると、まずはじめに、状態は「NEW」に設定されます。このあと、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>によってスレッドが開始されると、状態は「RUNNABLE」に設定され、実行フェーズとなります。 
     406                        「NEW」以外の状態のスレッドを <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>によって開始することはできず、万が一 <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>を呼び出してしまった場合、 <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/errors/IllegalThreadStateError.html">IllegalThreadStateError 例外</a>がスローされます。</p> 
     407                         
     408                        <p><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Monitor.html#wait()">wait メソッド</a>、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#join()">join メソッド</a>等の呼び出しによってスレッドが待機状態になる場合 (詳しくは「<a href="#controling-thread">4. スレッドの制御</a>」を参照してください) 状態は「WAITING」に設定されます。 
     409                        このとき、制限時間が設定されるか、または<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#sleep()">sleep メソッド</a>の呼び出しであった場合、状態は「TIMED_WAITING」に設定されます。待機状態が解除されると、状態は元に戻ります。</p> 
    410410                         
    411411                        <p>スレッドが終了フェーズに移行すると、状態は「TERMINATING」に設定されます。スレッドが終了フェーズから実行フェーズに戻ることはないので、 
     
    416416                        <hr /> 
    417417                         
    418                         <h2>3. スレッドの親子関係</h2> 
    419                          
    420                         <h3>3-1. スレッドの親子関係の決定</h3> 
    421                          
    422                         <p>スレッドの親子関係は、スレッドの実行開始時に決定されます。あるスレッドの実行中に別のスレッドの実行を開始した (<a href="">start メソッド</a>を呼び出した) 場合、 
    423                         実行を開始させた (<a href="">start メソッド</a>を呼び出した) スレッドは「<strong>親スレッド</strong>」となり、実行が開始された (<a href="">start メソッド</a>が呼び出された) スレッドはその「<strong>子スレッド</strong>」となります。</p> 
    424                          
    425                         <p>スレッドの親子関係は、実行順序と例外の伝播において重要になります。詳しくはそれぞれ「<a href="">3-2. 親子関係のあるスレッドの実行順序</a>」と「<a href="">7-x. 例外の伝播</a>」で解説します。</p> 
     418                        <h2 id="thread-hierarchy">3. スレッドの親子関係</h2> 
     419                         
     420                        <h3 id="decision-of-thread-hierarchy">3-1. スレッドの親子関係の決定</h3> 
     421                         
     422                        <p>スレッドの親子関係は、スレッドの実行開始時に決定されます。あるスレッドの実行中に別のスレッドの実行を開始した (<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>を呼び出した) 場合、 
     423                        実行を開始させた (<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>を呼び出した) スレッドは「<strong>親スレッド</strong>」となり、実行が開始された (<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#start()">start メソッド</a>が呼び出された) スレッドはその「<strong>子スレッド</strong>」となります。</p> 
     424                         
     425                        <p>スレッドの親子関係は、実行順序と例外の伝播において重要になります。詳しくはそれぞれ「<a href="#execution-order-of-thread-hierarchy">3-2. 親子関係のあるスレッドの実行順序</a>」と「<a href="#exceptions">7. 例外</a>」で解説します。</p> 
    426426                         
    427427                        <p>どのスレッドも実行されていない状態でスレッドの実行が開始された場合、つまり親スレッドがいない場合、そのスレッドは「<strong>トップレベルスレッド</strong>」となります。</p> 
     
    448448a.start();</pre> 
    449449                         
    450                         <h3>3-2. 親子関係のあるスレッドの実行順序</h3> 
     450                        <h3 id="execution-order-of-thread-hierarchy">3-2. 親子関係のあるスレッドの実行順序</h3> 
    451451                         
    452452                        <p>あるスレッドに子スレッドが存在する場合、そのスレッドよりも先に子スレッドが実行され、その後でそのスレッドが実行されます。 
     
    501501a.start();</pre> 
    502502                         
    503                         <h3>3-3. 孤児スレッド</h3> 
     503                        <h3 id="orphan-thread">3-3. 孤児スレッド</h3> 
    504504                         
    505505                        <p>子スレッドよりも先に親スレッドが終了した場合、その子スレッドは「<strong>孤児スレッド</strong>」となり、トップレベルスレッドとして再配置されます。 
     
    508508                        <hr /> 
    509509                         
    510                         <h2>4. スレッドの制御</h2> 
    511                          
    512                         <h3>4-1. スレッドの終了待ち</h3> 
    513                          
    514                         <p>あるスレッドの<a href="">join メソッド</a>を呼び出すと、そのスレッドが終了するまで、<a href="">join メソッド</a>を呼び出したスレッドを待機させることができます。 
    515                         待機について詳しくは「<a href="">2-5. スレッドの待機</a>」を参照して下さい。</p> 
     510                        <h2 id="controling-thread">4. スレッドの制御</h2> 
     511                         
     512                        <h3 id="joining-thread">4-1. スレッドの終了待ち</h3> 
     513                         
     514                        <p>あるスレッドの<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#join()">join メソッド</a>を呼び出すと、そのスレッドが終了するまで、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#join()">join メソッド</a>を呼び出したスレッドを待機させることができます。 
     515                        待機について詳しくは「<a href="#waiting-thread">2-5. スレッドの待機</a>」を参照して下さい。</p> 
    516516                         
    517517                        <p>次の例では、スレッド MyThread の中で、「Start」を出力したあと、数字を 5 までカウントする CountThread を開始し、終了を待ってから「End」を出力します。</p> 
     
    566566End</pre> 
    567567                         
    568                         <h3>4-2. 指定時間の待機</h3> 
    569                          
    570                         <p><a href="">sleep メソッド</a>を呼び出すと、指定時間が経過するまで、<a href="">sleep メソッド</a>を呼び出したスレッドを待機させることができます。 
    571                         待機について詳しくは「<a href="">2-5. スレッドの待機</a>」を参照して下さい。</p> 
     568                        <h3 id="sleeping">4-2. 指定時間の待機</h3> 
     569                         
     570                        <p><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#sleep()">sleep メソッド</a>を呼び出すと、指定時間が経過するまで、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#sleep()">sleep メソッド</a>を呼び出したスレッドを待機させることができます。 
     571                        待機について詳しくは「<a href="#waiting-thread">2-5. スレッドの待機</a>」を参照して下さい。</p> 
    572572                         
    573573                        <p>次の例では、スレッド MyThread で、1 秒ごとにカウントを 1 ずつ増やしながらそれを出力します。</p> 
     
    596596t.start();</pre> 
    597597                         
    598                         <h3>4-3. イベント</h3> 
    599                          
    600                         <p><a href="">event メソッド</a>を呼び出すと、指定されたイベントが発生するまで、<a href="">event メソッド</a>を呼び出したスレッドを待機させ、 
     598                        <h3 id="waiting-event">4-3. イベント</h3> 
     599                         
     600                        <p><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#event()">event メソッド</a>を呼び出すと、指定されたイベントが発生するまで、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#event()">event メソッド</a>を呼び出したスレッドを待機させ、 
    601601                        イベントが発生した際には、指定されたメソッドを実行関数として実行を再開させることが出来ます。 
    602                         待機について詳しくは「<a href="">2-5. スレッドの待機</a>」を参照して下さい。</p> 
     602                        待機について詳しくは「<a href="#waiting-thread">2-5. スレッドの待機</a>」を参照して下さい。</p> 
    603603                         
    604604                        <p>次の例では、スレッド MyThread で、Stage クラスのインスタンスに対してイベントハンドラを設定し、クリックした (MouseEvent.CLICK) 際には 
     
    636636t.start();</pre> 
    637637                         
    638                         <p><a href="">event メソッド</a>によって設定される実行関数は特殊で、通常のイベントハンドラと同様、発生したイベントを引数として取る必要があります。 
     638                        <p><a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#event()">event メソッド</a>によって設定される実行関数は特殊で、通常のイベントハンドラと同様、発生したイベントを引数として取る必要があります。 
    639639                        その他の部分では通常の実行関数と違いは無く、全く同じ振る舞いをします。 
    640                         ここでは click メソッドと keyDown メソッド共に、次の実行関数を <a href="">run メソッド</a>に設定しているため、これらのメソッドが実行された後、 
    641                         <a href="">run メソッド</a>が実行され、再びイベント待ちをすることになります。</p> 
    642                          
    643                         <hr /> 
    644                          
    645                         <h2>5. モニタ機構</h2> 
     640                        ここでは click メソッドと keyDown メソッド共に、次の実行関数を <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>に設定しているため、これらのメソッドが実行された後、 
     641                        <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html#run()">run メソッド</a>が実行され、再びイベント待ちをすることになります。</p> 
     642                         
     643                        <hr /> 
     644                         
     645                        <h2 id="monitor-system">5. モニタ機構</h2> 
    646646                         
    647647                        <p>スレッドの待機と再開を自分の手でコントロールしたい場合、モニタ機構を使用することが出来ます。これは特に、複数のスレッドの協調動作をさせたい場合に役立ちます。</p> 
    648648                         
    649                         <p>モニタ機構は、<a href="">IMonitor インターフェイス</a>の実装クラスによって提供されます。ActionScript Thread Library には、 
    650                         <a href="">IMonitor インターフェイス</a>の標準の実装である <a href="">Monitor クラス</a>が用意されており、更に <a href="">Thread クラス</a>は 
    651                         <a href="">Monitor クラス</a>を継承しているので、このどちらかを使用するのが簡単です。</p> 
    652                          
    653                         <p>モニタ機構を簡単に説明すると、<a href="">wait メソッド</a>を呼び出したスレッドを、 
    654                         <a href="">notify メソッド</a>もしくは <a href="">notifyAll メソッド</a>が呼び出されるまで待機させるものです。 
    655                         待機について詳しくは「<a href="">2-5. スレッドの待機</a>」を参照して下さい。</p> 
    656                          
    657                         <p>あるモニタの <a href="">wait メソッド</a>を呼び出したスレッドは、そのモニタの「待機セット」と呼ばれる待合室に入り、 
    658                         待機状態に移行します。そして、別の誰かがそのモニタの <a href="">notify メソッド</a> を呼び出すと、 
     649                        <p>モニタ機構は、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/IMonitor.html">IMonitor インターフェイス</a>の実装クラスによって提供されます。ActionScript Thread Library には、 
     650                        <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/IMonitor.html">IMonitor インターフェイス</a>の標準の実装である <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Monitor.html">Monitor クラス</a>が用意されており、更に <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Thread.html">Thread クラス</a>は 
     651                        <a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Monitor.html">Monitor クラス</a>を継承しているので、このどちらかを使用するのが簡単です。</p> 
     652                         
     653                        <p>モニタ機構を簡単に説明すると、<a href="http://www.libspark.org/htdocs/as3/thread/org/libspark/thread/Monitor.html#wait()">wait メソッド</a>を呼び出したスレッドを、 
     654                        <a href="http://www.libspark.org/htdocs/as3/thread/org/libsp