社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

マルチスレッドプログラミング - Runnable interface の実装

前の記事では、Thread class を継承する方法を試しました。
マルチスレッドプログラミング - Thread class の継承 - 社内se × プログラマ × ビッグデータ

今回は、Runnable interface を実装することで、マルチスレッドを実現していきます。
f:id:blueskyarea:20170822004014p:plain

こんな感じで作成できます。

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 以外のクラスを継承できるのはいいですね。