ねっとぱんだ-プログラミング勉強ブログ-

Webデザイン、プログラミングの勉強ブログ。

【java】Thread

Thread

参考
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html
  • CPU利用の単位 thread of execution(実行の脈絡)という言葉を省略したもの。
  • プログラム内での実行スレッドのこと。
  • Java仮想マシンでは並列に実行される複数のスレッドを使用することができる。
  • 一般的にJava仮想マシンが起動するとmainメソッドを呼びだすとデーモンではないスレッドが実行している。
  • exitメソッドが呼び出されるか例外をスローされてデーモン以外のスレッドが終了するまで実行される。

新しいスレッドの作成

2通りのやり方がある

  1. Theradを継承してサブクラスを作って、
    runメソッドをオーバーライドする。インスタンス化してstartメソッドで開始。
  2. Runnableインターフェイスを実装する。
    runメソッドを実装する。
    Thread作成時に引数として参照オ型ブジェクト(?)を渡して、startメソッドで開始。
class MyRunnable implements Runnable {
	
	@Override
	public void run(){
		for (int i = 0; i < 500; i++){
			System.out.print("*");
		}
	}
	
}

class MyThread extends Thread {
	
	public void run(){
		for (int i = 0; i < 500; i++){
			System.out.print("+");
		}
	}
	
}

public class practice{
	
	public static void main(String args[]){
		
		//Threadを継承したクラスをインスタンス化
		MyThread mt = new MyThread();
		//スレッドを実行
		mt.start();
		
		//インターフェースを実装したクラスをインスタンス化
		MyRunnable r  = new MyRunnable();
		//上記クラスをスレッドに割り当て
		Thread t = new Thread(r);
		//スレッドを実行
		t.start();
		
		//mainメソッドのループ処理
		for (int i = 0; i < 500; i++){
			System.out.print(".");
		}
		
	}
	
}

上記では、

  1. Threadを継承したクラスのスレッド
  2. Runnableインターフェイスを実装したクラスのスレッド
  3. mainメソッドのスレッド

が並行して実行され、それぞれに設定した文字列が同時に出力される。
(例:+++++++++++++++++++++.................+***************************************)

その他

リファレンス
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Thread.html
スリープメソッドで送らせて実行するなど
http://www.itsenka.com/contents/development/java/topics/thread2.html