Going my way

いいなと思ったことをメモしていきます。

マルチスレッドことはじめ


Advertisements


スレッドとは
実行制御の流れのこと。
マルチスレッドとは、実行制御を複数並行で持つこと。
実際は同時に行なっているというよりは、CPUが短い時間で処理を切り替えて実行を切り替えている。


スレッドクラスの実装は2パターンある。
java.lang.Threadクラスの拡張
java.lang.Runnableインターフェースの実装

Threadクラスを使用したスレッドのサンプル

package thread;

public class ThreadSample {
	public static void main(String[] args){
		Count1 c1 = new Count1();
		Count2 c2 = new Count2();
		Count3 c3 = new Count3();
		c1.start();
		c2.start();
		c3.start();
	}
}

class Count1 extends Thread {
	public void run(){
		for(int i=1; i<20; i++){
			System.out.println("Count1:"+i);
		}
		System.out.println("Count1 end");
	}
}

class Count2 extends Thread {
	public void run(){
		for(int i=1; i<20; i++){
			System.out.println("Count2:"+i);
		}
		System.out.println("Count2 end");
	}
}

class Count3 extends Thread {
	public void run(){
		for(int i=1; i<20; i++){
			System.out.println("Count3:"+i);
		}
		System.out.println("Count3 end");
	}
}

Count1,Count2,Count3のクラスがマルチスレッドで実行される。
ただし、startで呼び出された順に実行されるわけではない。
スレッドの処理をスタートさせるのはOSで、プログラマには制御不可能である。
事実、このサンプルの実行結果は、以下の順で処理が終了した。

The thread has been started
Count2 end
Count3 end
Count1 end

Runnableインターフェースを使用したスレッドの作成

package thread;

public class ThreadSample2 {
	public static void main(String[] args){
		RunCount rc = new RunCount();
		RunCount2 rc2 = new RunCount2();
		RunCount3 rc3 = new RunCount3();
		
		//スレッド作りまくる
		Thread th = new Thread(rc);
		th.start();
		Thread th2 = new Thread(rc);
		th2.start();
		Thread th3 = new Thread(rc2);
		th3.start();
		Thread th4 = new Thread(rc3);
		th4.start();
		Thread th5 = new Thread(rc2);
		th5.start();
		Thread th6 = new Thread(rc3);
		th6.start();

	}
}

class RunCount implements Runnable{
	public void run(){
		for(int i=1; i<100; i++){
			//System.out.println("Count1:"+i);
		}
		System.out.println("Count1 end");
	}
}

class RunCount2 implements Runnable{
	public void run(){
		for(int i=1; i<100; i++){
			//System.out.println("Count2:"+i);
		}
		System.out.println("Count2 end");
	}
}

class RunCount3 implements Runnable{
	public void run(){
		for(int i=1; i<100; i++){
			//System.out.println("Count3:"+i);
		}
		System.out.println("Count3 end");
	}
}

実行結果は以下の通り

Count1 end
Count2 end
Count1 end
Count3 end
Count3 end
Count2 end