-1

start()スレッドについて勉強していて、Java スレッドのメソッドが実際に何をするのか混乱しています。

私の現在の理解では、 start メソッドはスレッドの実行をすぐに開始するのではなく、スレッドスケジューラによって実行のために選択されるのを待っているスレッドのプールに移動します。

これは正しいです?メソッドが実際に何をするかについての良いリソースを見つけることができないようです。

4

6 に答える 6

3

正確には、 への呼び出しstart()が実行されると、 への呼び出しをスケジュールするだけrun()です。スレッドがいつ実質的に起動されるか、またいつ実質的に停止されるかを判断することはできません。

詳細については、Oracle の Web サイトの Java Doc を参照してください。

于 2012-11-05T11:47:33.767 に答える
2

始める

public void start() このスレッドに実行を開始させます。Java 仮想マシンは、このスレッドの run メソッドを呼び出します。その結果、2 つのスレッドが同時に実行されます。現在のスレッド (start メソッドの呼び出しから戻るスレッド) と、もう一方のスレッド (その run メソッドを実行するスレッド) です。

例外: IllegalThreadStateException - スレッドがすでに開始されている場合。関連項目: run()、stop()

ソース

于 2012-11-05T11:46:01.217 に答える
1

Threads と ThreadPools を混同しています

スレッドは「実行単位」です。別のスレッドで実行されるコードは、呼び出し時にメイン プログラムと並行して実行されます。start()

ThreadPools は、スレッドの上に構築されたメカニズムであり、ThreadPool キューに送信したタスクを実行するスレッドのグループを作成できます。

于 2012-11-05T11:49:00.677 に答える
1

はい、これは正しいです。このスレッドがいつ実行されるかはわかりませんが、実行がスケジュールされていることは確かです。次の写真を見てください。スレッドのライフサイクルについて説明しています: http://cs.fit.edu/~ryan/java/language/thread.gif

于 2012-11-05T11:51:09.287 に答える
1

startはすぐに新しいスレッドを開始しますが、スレッドの性質上、そのスレッド内のコード行が実際にいつ実行されるかは保証されません。プールの概念には、ユーザーが要求したタスク間で再利用されるリソースが含まれるため、このコンテキストで「スレッド プール」という用語を使用することは適切ではありません。Threadインスタンスはメソッドの 1 回の呼び出しに固定されており、runその後スレッドは終了します。

スレッド スケジューラはネイティブ OS レベルのコンポーネントであり、JVM の直接の制御下にはありません。

于 2012-11-05T11:52:34.590 に答える
0

呼び出すThread.startと、スレッドを開始するために JVM に特別な指示が行われ、JVM がそのライフサイクルを処理します。

于 2012-11-05T11:47:17.020 に答える