Java面接知識点(31)マルチスレッド起動方式


一、Threadクラスの継承
threadクラスを継承しrunメソッドを書き換え、クラスオブジェクトをインスタンス化しstartメソッドを呼び出す
コードの例
public class thread1 extends Thread {
    public void run() {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i+"  run1()");
        }
    }

    public static void main(String args[]){
        thread1 t1 = new thread1();
        t1.start();
        for (int i = 1; i <= 10; i++) {
            System.out.println(i+"  main1()");
        }
    }
}

実行結果(結果が一意ではない)
1  main1()
1  run1()
2  run1()
3  run1()
4  run1()
5  run1()
6  run1()
7  run1()
8  run1()
9  run1()
10  run1()
2  main1()
3  main1()
4  main1()
5  main1()
6  main1()
7  main1()
8  main1()
9  main1()
10  main1()

二、Runnableインタフェースの実現
runnableインタフェースを実装し、runメソッドを書き換え、クラスオブジェクトをインスタンス化し、threadクラスのオブジェクトをインスタンス化し、runnableインタフェースを実装したオブジェクトをパラメータとしてthreadオブジェクトに転送し、threadクラスオブジェクトのstartメソッドを呼び出す.
コードの例
public class thread2 implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i+"  run()");
        }
    }

    public static void main(String args[]){
        thread2 t2 = new thread2();
        Thread t = new Thread(t2);
        t.start();
        for (int i = 1; i <= 10; i++) {
            System.out.println(i+"  main()");
        }
    }
}


実行結果(結果が一意ではない)
1  main()
1  run()
2  main()
2  run()
3  run()
4  run()
5  run()
6  run()
7  run()
8  run()
9  run()
10  run()
3  main()
4  main()
5  main()
6  main()
7  main()
8  main()
9  main()
10  main()

この2つのスレッドを作成する方法は、最初の作成方法がThreadを継承した後、他の親を継承できないため、2番目の(Runnableインタフェースを実装する)ほうが良いに違いありません.
補足:なぜスレッドの書き換えはrunにあり、マルチスレッドを起動する方法はstartですか?
1.start()メソッドはスレッドを起動し、本当にマルチスレッド実行を実現します.この場合runメソッドボリュームコードの実行が完了するのを待つ必要はなく、直接次のコードを実行することができます.Threadクラスのstart()メソッドを呼び出してスレッドを起動します.このスレッドは準備完了で実行されません.その後、このThreadクラスがメソッドrun()を呼び出して実行を完了し、ここでメソッドrun()はスレッドボディと呼ばれ、実行するこのスレッドの内容が含まれており、Runメソッドの実行が終了し、このスレッドが終了する.その後、CPUは他のスレッドをスケジューリングする.
2.run()メソッドは、通常のメソッドとして呼び出されます.プログラムは順番に実行するか、runメソッド体の実行が完了してから、次のコードを実行し続けることができます.プログラムにはプライマリ・スレッドしかありません.このスレッドは、プログラム実行パスが1つしかありません.これにより、書き込みスレッドの目的が達成されません.