Javaでの起動スレッドstartとrunメソッドの違い


Javaでスレッドを起動するには、Threadクラスの継承と実装インタフェースRunnableの2つの方法があり、Javaでは多重継承が実現できないため、インタフェースRunnableの実装によってスレッドを作成することが多い.ただし、どちらの作成もstart()とrun()メソッドでスレッドを起動できますが、両者の違いについて説明します.
         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();
    }

}