Javaでの起動スレッドstartとrunメソッドの違い
Javaでスレッドを起動するには、Threadクラスの継承と実装インタフェースRunnableの2つの方法があり、Javaでは多重継承が実現できないため、インタフェースRunnableの実装によってスレッドを作成することが多い.ただし、どちらの作成もstart()とrun()メソッドでスレッドを起動できますが、両者の違いについて説明します.
start():このメソッドでスレッドを起動すると同時にスレッドを作成し、run()メソッドのコードの実行を待つことなく次のコードを直接実行できます.startで作成したスレッドは実行可能な状態にあり、CPUタイムスライスが得られるとその中のrunメソッドが実行されます.ここでメソッドrun()実行するスレッドの内容を含むスレッドボディと呼ばれ、Runメソッドの実行が終了すると、このスレッドは終了します.
run():runメソッドによるスレッドの起動は、クラス内のメソッドを呼び出すことであり、スレッドを作成していません.プログラム内ではメインスレッドのみなのか、順番に実行するのか、runメソッド体の実行が完了するまで次のコードを実行し続けるのか、スレッドを書く目的を達成しません.
スレッドを作成する2つのコードの例を次に示します.
Threadクラスを継承
Runnableインタフェースの実装
start():このメソッドでスレッドを起動すると同時にスレッドを作成し、run()メソッドのコードの実行を待つことなく次のコードを直接実行できます.startで作成したスレッドは実行可能な状態にあり、CPUタイムスライスが得られるとその中のrunメソッドが実行されます.ここでメソッドrun()実行するスレッドの内容を含むスレッドボディと呼ばれ、Runメソッドの実行が終了すると、このスレッドは終了します.
run():runメソッドによるスレッドの起動は、クラス内のメソッドを呼び出すことであり、スレッドを作成していません.プログラム内ではメインスレッドのみなのか、順番に実行するのか、runメソッド体の実行が完了するまで次のコードを実行し続けるのか、スレッドを書く目的を達成しません.
スレッドを作成する2つのコードの例を次に示します.
Threadクラスを継承
package com.Test.Tread;
public class ThreadDemo02 extends Thread{
public void run(){
System.out.println(" !");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
ThreadDemo02 thread = new ThreadDemo02();
thread.start();
}
}
Runnableインタフェースの実装
package com.Test.Tread;
public class ThreadDemo03 implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(" 02");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread thread01 = new Thread(new ThreadDemo03());
thread01.start();
}
}