Javaのマルチスレッドのサンプルです。
目次
サンプル | マルチスレッド |
マルチスレッドで実行する(Runnableインターフェース) | |
マルチスレッドで実行する(Threadクラス) | |
マルチスレッドで実行した結果 |
マルチスレッド
- 複数のスレッドが並行で処理できます。
- Runnableインターフェースを実装する、またはThreadクラスを継承します。
- 上から順に1つのスレッドで処理するのはシングルスレッドです。
以下は、Eclipseのデバッグモードでマルチスレッドを確認したところです。
mainスレッドの他に作成した3つのスレッドがあります。
マルチスレッドで実行する(Runnableインターフェース)
public interface Runnable |
void run() |
- メインスレッドとは別に新規のスレッドが作成されます。
- Runnableインターフェースを実装したクラスはrunメソッドをオーバーライドする必要があります。
- 以下はJava8 API仕様のRunnableインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Runnable.html
Runnableインターフェースを使用したサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
Animal a1 = new Animal("dog");
Animal a2 = new Animal("cat");
new Thread(a1).start();
new Thread(a2).start();
System.out.println("end");
}
}
class Animal implements Runnable {
private String animal;
Animal(String animal) {
this.animal = animal;
}
@Override
public void run() {
for (int i = 0; i < 2; i++) {
System.out.println(animal);
}
}
}
13行目は、Runnableインターフェースを実装しています。
19行目は、Runnableインターフェースのrunメソッドのオーバーライドしています。
5,6行目は、それぞれクラスをインスタンス化しています。
8,9行目は、startメソッドでスレッドの実行を開始しています。runメソッドが呼び出されます。
マルチスレッドで実行する(Threadクラス)
public class Thread extends Object implements Runnable |
public void run() |
- メインスレッドとは別に新規のスレッドが作成されます。
- Threadクラスを継承したクラスはrunメソッドをオーバーライドする必要があります。
- 以下はJava8 API仕様のThreadクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html
Threadクラスを使用したサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
Animal a1 = new Animal("dog");
Animal a2 = new Animal("cat");
a1.start();
a2.start();
System.out.println("end");
}
}
class Animal extends Thread {
private String animal;
Animal(String animal) {
this.animal = animal;
}
@Override
public void run() {
for (int i = 0; i < 2; i++) {
System.out.println(animal);
}
}
}
13行目は、Threadクラスを継承しています。
19行目は、Threadクラスのrunメソッドのオーバーライドしています。
5,6行目は、それぞれクラスをインスタンス化しています。
8,9行目は、startメソッドでスレッドの実行を開始しています。runメソッドが呼び出されます。
マルチスレッドで実行した結果
1.マルチスレッドで動くため何回か実行すると出力される順番が変わります。
以下は1回目の実行です。
以下は2回目の実行です。
関連の記事