こんにちは。「Javaを復習する初心者」です。
今回はThreadクラスを使い、別スレッドを動かすということ行いました。
別スレッドを作りには次の2つの方法があります。
- Threadクラスを継承する。
- Runnableインターフェースを実装する。
Threadクラス
以下は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インターフェースを実装する場合は次のような書き方です。
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()メソッドが別スレッドで動いているのが分かります。