こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

ThreadクラスとRunnableインターフェース

こんにちは。「Javaを復習する初心者」です。今回はThreadクラスを使い、別スレッドを動かすということ行いました。

別スレッドを作りには次の2つの方法があります。

  • Threadクラスを継承する。
  • Runnableインターフェースを実装する。

Threadクラス

以下はThreadクラスを継承する方法です。

public class MyThread extends Thread {

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("i: " + i);
        }
    }

}

以下のように使います。

public class Main {

    public static void main(String[] args) {

        MyThread thread = new MyThread();
        thread.start();
        System.out.println("end");
    }

}

MyThread型変数threadにインスタンスを格納しています。Threadクラスを拡張しているため、Thread#start()メソッドを呼び出すことができます。startメソッドが呼び出されるとrunメソッドが呼び出されます。MyThreadはrunメソッドをオーバーライドしているので、以下のような結果になります。

end
i: 0
i: 1
i: 2
i: 3
i: 4

結果の一行目に「end」が出力されているので、MyThread#run()メソッドが別スレッドで動いているのが分かります。

Runnableインターフェース

Runnableインターフェースを実装する場合は次のような書き方です。

public class MyRunnableClass implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("Runnable i: " + i);
        }
    }

}

Runnableインターフェースはrun()メソッドのみを持ちます。そのため、run()メソッドをオーバライドするのみです。Runnableインターフェースを実装したクラスを別スレッドで動かす方法は以下のようなやり方です。

public class Main {

    public static void main(String[] args) {

        MyRunnableClass c = new MyRunnableClass();
        Thread thread = new Thread(c);
        thread.start();

        System.out.println("end");
    }

}

ThreadクラスのコンストラクタThread(Runnable target)を使います。引数にはRunnableインターフェースを実装したクラスを指定します。後はThreadクラスのstartメソッドをインスタンスに対して呼び出すことでスレッドが開始されます。実行結果は以下のようになります。

end
Runnable i: 0
Runnable i: 1
Runnable i: 2
Runnable i: 3
Runnable i: 4

結果の一行目に「end」が出力されているので、MyRunnableClass#run()メソッドが別スレッドで動いているのが分かります。