Learn to Live and Live to Learn

IT(たまにビジネス)に関する記事を読んで、考えて、使ってみたことをまとめる場。

Javaでマルチスレッドプログラム

マルチスレッドってそれとなくわかった気になって、使っていたのですが
改めて調べ直してみました。

マルチスレッドとは
複数の処理が一つのプログラム上で動いているように見せる方法。

種類

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

実戦

まず、『Treadクラスを継承』をやってみました。

Threadクラスのサブクラスを作って、そこに
runメソッド(=スレッド化したい処理)とmainメソッド(=スレッドを実行)
を書きます。

ソースコード

public class ExThread1 extends Thread {
	
	public void run () {
		// 10 9 8 ... 2 1 0
		for ( int i = 10; i >= 0; i-- ) {
			System.out.println(getName() + ":" + i);
			try {
				// 1秒間ストップ
				sleep(1000);
			} catch ( InterruptedException e ) {		
			}
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ExThread1 thread1 = new ExThread1();
		ExThread1 thread2 = new ExThread1();
		thread1.start();
		thread2.start();
	}

}

実行結果

Thread-1:10
Thread-2:10
Thread-1:9
Thread-2:9
Thread-2:8
Thread-1:8
Thread-1:7
Thread-2:7
Thread-1:6
Thread-2:6
Thread-1:5
Thread-2:5
Thread-1:4
Thread-2:4
Thread-1:3
Thread-2:3
Thread-1:2
Thread-2:2
Thread-1:1
Thread-2:1
Thread-2:0
Thread-1:0

ちなみにThread-1とThread-2を交互に実行していますが
1が終わった後に2をしたい場合は以下。

…
thread1.start();
try {
	thread1.join();
} catch ( InterruptedException e ) {
}
thread2.start();
…

スレッドの完了を待つ『joinメソッド』を使います。



参考URL
http://www.javaroad.jp/java_thread1.htm
http://www.tohoho-web.com/java/thread.htm
http://www.ne.jp/asahi/hishidama/home/tech/java/thread.html