マルチスレッドことはじめ
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