alphaのjava備忘録

alphaが勉強したことを書いていくブログ

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クラスのインスタンスを作成する必要があるところかな。