JAVA言語 スレッド(Thread, Runnable)

TOP > JAVA入門 >  スレッド(Thread, Runnable)
このエントリーをはてなブックマークに追加

スレッドとは?

通常の長い処理を行うプログラムを実行すると、処理が終わるまで待ち時間が生じ、画面が固まって見えたりします。それを回避する方法として、スレッドを生成しそこで処理を行えば画面が固まったりせずに、ひとつのプログラムの中で複数の処理を平行して走らせることができます。

スレッド(Thread)

①Thread クラスをextendsしたサブクラスを作成し、行いたい処理を run()メソッドに記述します。
②①で作成したクラスのインスタンスを生成し、start() メソッドを実行することで run()メソッドが実行されます。
// メイン処理
class Test {
    public static void main(String[] args) {
		// サブクラスのインスタンスを生成
        ThreadTest t1 = new ThreadTest();
        ThreadTest t2 = new ThreadTest();
        
        // 平行して処理が実行されます。
        t1.start();
        t2.start();
    }
    
    // サブクラス
	// Thread を extends したサブクラス
	class ThreadTest extends Thread {
		// start() で実行が開始される。
	    public void run() {
	        for (int i = 0; i < 100; i++) {
	            System.out.print(i);
	        }
	    }
	}
}



ランナブル(Runnable)

他のクラスを継承しているサブクラスをスレッド化する場合は若干方法が変わり、
①サブクラスに Runnable インタフェースを実装(implements)します。
②そのサブクラスのインスタンスを生成します。
③②のインスタンスを引数にし、スレッドを生成します。
④③で作成したクラスのインスタンスを生成し、start() メソッドを実行することで run()メソッドが実行されます。
class Test2 {
    public static void main(String[] args) {
		// サブクラスのインスタンスを生成
        ThreadTest2 t2 = new ThreadTest2();
        ThreadTest2 t4 = new ThreadTest2();
        
        // スレッドのインスタンスを生成
        Thread t1 = new Thread(t2);
        Thread t3 = new Thread(t4);

		// 平行して処理が実行されます。
        t1.start() ;
        t3.start() ;
    }
    
    // サブクラス
    // 既に extends されている場合は Runnable を implements 
	class ThreadTest2 extends SurfaceView implements Runnable {
	    public void run() {
	        for (int i = 0; i < 100; i++) {
	            System.out.print(i);
	        }
	    }
	}
}