スレッドの開始方法と実行方法の違い
スレッドでは、STARTメソッドが実行方法を順番に呼び出す場合、なぜSTARTメソッドを呼び出すことを選択するのですか?または、Javaスレッドで開始方法と実行方法を呼び出すことの違いは何ですか?これらの2つの質問は、初心者レベルでの非常に人気のある2つのマルチスレッドインタビューの質問です。 Javaプログラマがスレッドの学習を開始すると、まずスレッドクラスを継承し、実行方法をオーバーロードするか、実行可能なインターフェイスを実装し、実行メソッドを実装してから、スレッドインスタンスの開始メソッドを呼び出します。しかし、彼にある程度の経験がある後、彼はSTARTメソッドがAPIドキュメントやその他の方法を調べることで内部的に実行方法を呼び出すことに気付くでしょうが、私たちの多くは、インタビュー中に尋ねられたとき、この質問の重要性を認識することを知っています。このJavaチュートリアルでは、Javaでスレッドを開始するときにSTARTメソッドを呼び出すことと実行方法を呼び出すことの違いを理解します
この投稿は、Java Multithreadingで公開されている記事のいくつかの記述、たとえばJavaのRunnableとThreadの違い、およびBlockingQueueを使用してJavaのプロデューサーの消費者問題を解決する方法です。まだ読んでいない場合は、面白くて便利だと思うかもしれません。
Javaスレッドでのスタートと実行の違い
開始方法と実行方法の主な違いは、プログラムがSTARTメソッドを呼び出すと、新しいスレッドが作成され、実行中のコードが新しいスレッドで実行されることです。ただし、実行方法を直接呼び出すと、プログラムは新しいスレッドを作成せず、実行方法内のコードは現在のスレッドで実行されます。ほとんどの場合、実行方法を呼び出すことはバグまたは間違いです。発信者の当初の意図は、開始方法を呼び出して新しいスレッドを開始することであるため、このエラーは、fingbugsなどの多くの静的コードカバレッジツールによって検出できます。時間がかかるタスクを実行したい場合は、STARTメソッドを使用することをお勧めします。そうしないと、実行方法を呼び出すとメインスレッドが貼り付けられます。もう1つの違いは、スレッドが起動したら、スレッドオブジェクトの開始方法を繰り返し呼び出すことができないことです。すでに開始したスレッドの開始方法を呼び出すと、IllegalStateExceptionの例外が報告されますが、実行方法を繰り返し呼び出すことができます
以下は、開始方法と実行方法のデモです
スレッドのタスクは、文字列値に渡された現在のスレッドの名前を印刷することです。
ここでは、2つの違いをはっきりと見ることができます
public class diffbewteenstartandrun {public static void main(string args []){system.out.println(thread.currentthread()。getname()); //開始および実行のための2つのスレッドの作成コールスレッドstartthread = newスレッド(newタスク( "Start"));スレッドrunthread = newスレッド(new Task( "run")); startthread.start(); //スレッドの開始方法を呼び出す - //新しいスレッドrunthread.run(); // [スレッドの実行方法 - //現在のスレッドで実行されます}/ * *単純な実行可能な実装 */ private static classタスク実装runnable {private string caller;パブリックタスク(String Caller){this.caller = caller; } @Override public void run(){system.out.println( "caller:" + caller + "およびこのスレッドのコードは、" + thread.currentthread()。getName())によって実行されます。 }}}読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!