Learn to Live and Live to Learn

IT(たまにビジネス)に関する記事を読んで、考えて、使ってみたことをまとめる場。

JavaでマルチスレッドプログラムーRunnableインターフェイス実装編ー

昨日に引き続き今日は、Runnableインターフェイスを実装する場合のマルチスレッドプログラムです。

Q. Runnableインターファイスを実装するのはどんなとき?
A. 他に継承する必要のあるクラスがあり、Threadクラスを継承できないとき。

Q. どうやって実装するの?
A. ソースコードをご覧ください。

/*
 * Runnableインターフェイスの実装。
 * 
*/

public class ExThread2 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		RunnableTestThread rtt = new RunnableTestThread();
		Thread t = new Thread(rtt);
		t.start();
		for (int i = 0; i < 10; i++) {
			System.out.println("hoge");
		}
	}

}

// 実際は何らかのクラスを既に継承していて、Threadクラスの継承ができない場合に使用。
// 例、class RunnableTestThread extends hoge implements Runnable {
class RunnableTestThread implements Runnable {
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println(this.getClass() + ":" + i);
		}
	}
}

実行結果

hoge
class RunnableTestThread:0
class RunnableTestThread:1
class RunnableTestThread:2
class RunnableTestThread:3
class RunnableTestThread:4
class RunnableTestThread:5
class RunnableTestThread:6
class RunnableTestThread:7
class RunnableTestThread:8
class RunnableTestThread:9
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge

Q. 気を付けることは?
A. 上の実行結果を見ると

System.out.println("hoge");

が一度実行された後に

System.out.println(this.getClass() + ":" + i);

が走り、その後残りの

System.out.println("hoge");

が実行されています。
スレッド化された処理がいつ実行されるのかは注意がいると思います。