Java マルチスレッドのサンプル(ThreadとRunnable)

Javaのマルチスレッドのサンプルです。
ThreadクラスまたはRunnableインターフェースを使用します。

目次

Threadクラス

  • Threadクラスを継承して使用します
  • メインスレッドとは別に新規のスレッドが作成されます
  • Threadクラスを継承したクラスはrunメソッドをオーバーライドする必要があります
  • 以下はJava8 API仕様のThreadクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html

コード

Threadクラスを使用したコードです。
メインスレッドとその他に3つのスレッドを作成しています。

package test1;

/**
 *  Threadクラスのサンプル
 */
// Threadクラスのサブクラスであると宣言
class Sample extends Thread{
	private String message;
	
	public Sample(String msg){
		this.message = msg;
	}
	
	// Threadクラスのrunメソッドのオーバーライド
	@Override
	public void run(){
		for (int i = 0;i<3;i++){
			System.out.println(message);
		}
	}
}
class Sample2 {
	void runSample(){
		System.out.println("テスト");
	}
}
public class Test1 {
	public static void main(String[] args) {
		// インスタンス化
		Sample s1 = new Sample("こんにちは");
		Sample s2 = new Sample("Hello");
		Sample s3 = new Sample("Guten Tag");
		Sample2 s = new Sample2();
		// startメソッドでスレッドの実行を開始する
		// runメソッドが呼び出される
		s1.start();
		s2.start();
		s3.start();
		s.runSample();//テスト
 	}
}

結果

1.マルチスレッドで動くため何回か実行すると出力される順番が変わります。
下図の左列が1回目の実行時の結果で、右列が2回めの実行時の結果です。

thread1

2.デバッグモードで実行中のスレッドを確認したところです。
mainスレッドの他に作成した3つのスレッドがあります。

thread2

 

Runnableインターフェース

  • Runnableインターフェースを実装して使用します
  • メインスレッドとは別に新規のスレッドが作成されます
  • Runnableインターフェースを実装したクラスはrunメソッドをオーバーライドする必要があります
  • 挙動はThreadクラスと同じです
  • 以下はJava8 API仕様のRunnableインターフェースのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Runnable.html

コード

Runnableインターフェースを使用したコードです。
メインスレッドとその他に3つのスレッドを作成しています。

package test1;

/**
 *  Runnableインターフェースのサンプル
 */
// Runnableインターフェースを実装
class Sample implements Runnable{
	private String message;
	
	public Sample(String msg){
		this.message = msg;
	}
	
	// runメソッドのオーバーライド
	@Override
	public void run(){
		for (int i = 0;i<3;i++){
			System.out.println(message);
		}
	}
}
class Sample2 {
	void runSample(){
		System.out.println("テスト");
	}
}
public class Test1 {
	public static void main(String[] args) {
		// インスタンスを生成
		Sample s1 = new Sample("こんにちは");
		Sample s2 = new Sample("Hello");
		Sample s3 = new Sample("Guten Tag");
		Sample2 s = new Sample2();		
		// Threadクラスのコンストラクタを使用
		// startメソッドでスレッドの実行を開始する
		// runメソッドが呼び出される
		new Thread(s1).start();
		new Thread(s2).start();
		new Thread(s3).start();
		s.runSample();//テスト
 	}
}



△上に戻る