implementsを使ってThreadを実装するには
前々回の記事では、Javaでのスレッドの実装方法は2種類あるという話だった。
Javaでスレッドを使用する方法には
・extendsを使う
・implementsを使う
の2種類がある。今回は簡単そうなExtendsの方を実践してみる。
今回はまだ触れてないimplementsを使う方法でスレッドを実装してみる。
extendsを使う方法との違いは
・スレッドとして使用するクラスでextendsの代わりにimplementsを使う。 ・Threadクラスを継承する代わりに、Runnableインターフェイスを実装 ・継承しないため、別のクラスの継承をしてもOK ・スレッドとして使用するクラスをインスタンス化した後、直接start()メソッドを使用できない。 ・↑のインスタンスを引数にThreadクラスのインスタンスを生成して、 Threadクラスのインスタンスからstart()メソッドを実行しなければならない。 ・つまりスレッド実装には、結局Threadクラスのインスタンスとstart()メソッドが必要。
extendsを使う方法と同じ点は
・Runnableインターフェイスを実装したクラスでは 並列処理したい内容をrun()メソッド内に記載する必要がある ・スレッドを使用するクラスではそれをstart()メソッドで実行する必要がある
以下が実践してみたソースコード。
class Main { public static void main (String[] args) { System.out.println("Thread 1 moved."); Thread2 th2 = new Thread2(); Thread th = new Thread(th2); th.start(); } } class Thread2 implements Runnable{ public void run(){ System.out.println("Thread 2 moved."); } }
実行結果 Thread 1 moved. Thread 2 moved.
extendsを使う方法との一番の違いはやっぱりRunnableインターフェイス実装クラスをインスタンス後に、さらにそのインスタンスを引数にThreadクラスのインスタンスを作成する必要があるところかな。