マルチスレッドプログラミング - Runnable interface の実装
前の記事では、Thread class を継承する方法を試しました。
マルチスレッドプログラミング - Thread class の継承 - 社内se × プログラマ × ビッグデータ
今回は、Runnable interface を実装することで、マルチスレッドを実現していきます。
こんな感じで作成できます。
public class Dog extends Animal implements Runnable { }
この実装のメリットとしては、継承するクラスの対象として、Thread クラス 以外を指定することができます。
Runnable インタフェースは、run() メソッドを実装しているので、オーバーライドします。
public class Dog extends Animal implements Runnable { @Override public void run() { // anything task } }
このスレッドを開始するためには、ワーカーとなるクラスのインスタンスを生成して、Threadインスタンスに渡してあげます。
そして、start() メソッドにより開始します。
Dog dog = new Dog(); Thread thread = new Thread(dog); thread.start();
Thread クラス自体が Runnable インタフェースを実装しています。
それと同じように Runnable インタフェースを実装したクラスを定義してあげていることになります。
Thread クラスに渡してあげることで、start() が使えるようになります。
public class Thread extends Object implements Runnable
まとめ
一つのスレッドを開始するために、最低2つのインスタンスを生成する必要がありますが、Thread 以外のクラスを継承できるのはいいですね。