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");
が実行されています。
スレッド化された処理がいつ実行されるのかは注意がいると思います。