3

私はスレッドで Java コーディングを開始していますが、Oracle のチュートリアル セクションで理解できないコード行に出くわしました。

(new Thread(new HelloRunnable())).start();

この行では、新しいスレッドが宣言されますが、オブジェクトに直接適用されず、すぐに start メソッドを呼び出してスレッドを実行します。これはどのように作動しますか?new キーワードがこの括弧内で機能するのはなぜですか? ここで何が起こっているのかを明確にしたいと思います、ありがとう。完全なソースは次のとおりです: http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html

4

5 に答える 5

3

Thread インスタンスを括弧で囲む必要はありません。以下も同様に機能します

new Thread(new HelloRunnable()).start();

ステートメントを展開すると、このコードに相当します

Runnable myrunnable = new HelloRunnable();
Thread mythread = new Thread(myrunnable);
mythread.start();

チュートリアルは簡潔です。

于 2012-05-01T01:40:57.650 に答える
1

この行は次と同等です。

// I have put it in block, as you don't have a reference to any of those objects afterwards
{
    // instantiate a runnable
    HelloRunnable runnable = new HelloRunnable(); 
    // instantiate a thread object that will use this runnable
    Thread thread = new Thread(runnable); 
    // start the thread (call the run method of the runnable on a new thread)
    thread.start(); 
}
于 2012-05-01T01:37:29.200 に答える
0

これは有効なステートメントであるため機能します。Thread オブジェクトで start() メソッドを実行します。Thread オブジェクトは、参照変数として宣言されるだけでなく、オブジェクトとして作成されます。

于 2012-05-01T01:25:40.143 に答える
0

RunnableThread コンストラクターに渡すために実装するオブジェクトのインスタンスが必要です。呼び出しnew HelloRunnable()はあなたにそれを与えます。

実行するには Thread オブジェクトが必要です。への呼び出しnew Thread()はそれをあなたに与えます。

start()その新しいThreadインスタンスを呼び出します。コンストラクターに指定したインスタンスでrun()メソッドを呼び出します。Runnable

于 2012-05-01T01:25:40.480 に答える
0
  1. 新しいThreadオブジェクトが作成され、startその上で呼び出されます。
  2. なぜそうしないのですか?オブジェクトの作成は、変数への格納とは別の操作です。作成方法を見てくださいHelloRunnable。同じことをしています。
于 2012-05-01T01:26:10.340 に答える