スレッドの作成

スレッド→オブジェクトとして作成され、実行される。
HOW TO
・java.lang.Threadを継承
・java.lang.Runnableメソッドの実装

■Threadを継承
スレッドを新しく定義する場合:
 1. Threadクラス継承クラスの作成
 2. run()メソッドをオーバーライド
 3. 作成したクラスをインスタンス化
 4. start()メソッドの呼び出し

スレッドは、
run()メソッドで実行(running)。
start()で実行可能状態(Runnable state)
→マシンのリソースを割り当てられ待機。

==================================================
class Count extends Thread {
public void start() {
System.out.println("*** RUNNABLE");
super.start();
}

public void run() {
System.out.println("*** RUNNING");
for (int i=0; i <= 5; i++) {
System.out.println("Count: " + i);
}
System.out.println("*** DEAD");
}
}

class CountTest {
public static void main(String[] args) {
Count thread = new Count();
System.out.println("*** NEW THREAD");
thread.start();

System.out.println("last line in main()");
}
}
--------------------------------------------------
*** NEW THREAD
*** RUNNABLE
last line in main()
*** RUNNING
Count: 0
Count: 1
Count: 2
Count: 3
Count: 4
Count: 5
*** DEAD
==================================================
☆start() が呼ばれてから直ぐに run() が実行されているわけではない。
 上記では、main()がCPUを占領中。main()がCPUを開放してから、
 新しく作ったスレッドにCPUが割り当てられ、run()が走る。

■Runnableインタフェースの実装
Java→1つのsuperClassしか持てない単一継承言語。
⇒何かのサブクラスをスレッドとして実行させたい場合、
 Threadクラスを継承して作ることが不可。
⇒Runnableインタフェースを実装。
※ThreadクラスもRunnableインタフェースをimplementsしてる。

Runnableをimplしてスレッドを作る場合:
 1. Runnableインタフェースの実装
 2. run()メソッドの実装
 3. 実装クラスのインスタンス化
 4. Threadクラスのインスタンス化
 5. start()メソッドの呼び出し

実装クラスをインスタンス化して作ったオブジェクトの参照を、
Threadクラスのコンストラクタ引数にする。

==================================================
class CountA implements Runnable {

public void run() {
for (int i=0; i <= 5; i++) {
System.out.println("A: " + i);
}
}
}

class CountB implements Runnable {

public void run() {
for (int i=5; i >= 0; i--) {
System.out.println(" B: " + i);
}
}
}

class CountsTest {
public static void main(String[] args) {
// ランナブルクラスのインスタンス化
CountA runA = new CountA();
CountB runB = new CountB();
System.out.println("Runnable Class のインスタンス化終了");

// スレッドのインスタンス化
Thread threadA = new Thread(runA);
Thread threadB = new Thread(runB);
System.out.println("Thread へ受け渡し終了");

// スレッドの開始
threadA.start();
threadB.start();
System.out.println("Thread の start() 終了");
System.out.println("適時自動的に run() が実行される");
}
}
--------------------------------------------------

--------------------------------------------------
Runnable Class のインスタンス化終了
Thread へ受け渡し終了
Thread の start() 終了
適時自動的に run() が実行される
A: 0
A: 1
A: 2
A: 3
A: 4
A: 5
B: 5
B: 4
B: 3
B: 2
B: 1
B: 0
--------------------------------------------------

--------------------------------------------------
Runnable Class のインスタンス化終了
Thread へ受け渡し終了
A: 0
Thread の start() 終了
A: 1
B: 5
B: 4
A: 2
適時自動的に run() が実行される
B: 3
B: 2
A: 3
A: 4
A: 5
B: 1
B: 0
==================================================

①か②かは実行マシンの構成次第

ref:
http://www.nextindex.net/java/thread/create.html
2008-02-20 02:20 : __lang__java : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud