私は最近、次のようにコードに関する質問を見ました:
コードコピーは次のとおりです。
public static void main(string args []){
スレッドT = newスレッド(){
public void run(){
pong();
}
};
t.run();
System.out.println( "ping");
}
static void pong(){
system.out.println( "pong");
}
質問、結果はどのような出力になりますか?
私はそれを何度も走らせました、そしてそれはポンポンであることが判明しました。その後、最終的にキーポイントであるスレッドオブジェクトTを発見しました。これは、start()メソッドではなく、run()メソッドを呼び出します。その後、BreakPointモードのデバッグを開き、run()メソッドを呼び出すと、Start()メソッドを呼び出した後、プログラムにはもう1つのスレッドがあることがわかりました。その場合にのみ、CPUのメインスレッドと競合できます。複数の結果が存在する場合がありますが、次の出力方法が迅速に実行されるため、基本的に「Ping Pong」の出力です。
したがって、run()とstart()の違いは次のとおりです。
run()は、実行可能なインターフェイスで定義されているメソッドです。これにより、クライアントプログラマーがこの方法で独自の機能コードを作成できるようにします。直接電話をかけることと、通常のクラスごとに自分のメンバーの方法を呼び出すことに違いはありません。
start()は、このメソッドが呼び出されると、プログラムに独立したスレッドが表示されるフラグです。
したがって、別のスレッドを書きたい場合は、インターフェイスを実装することが最善であると思います。 。