2

それは基本的な質問かもしれません、私はこれで混乱しました、

1つのファイルで私はこのようにしています:

public class MyThread extends Thread {
    @Override
    public void run() {
        //stuffs
    }
}

今別のファイルに私はこれを持っています:

public class Test {
    public static void main(String[] args) {
        Thread obj = new MyThread();

        //now cases where i got confused
        //case 1
        obj.start();   //it makes the run() method run
        //case 2
        obj.run();     //it is also making run() method run
    }
}

上記の2つのケースの違いは何ですか?ケース1は新しいスレッドを作成し、ケース2はスレッドを作成していませんか? それは私の推測です...より良い答えを願っています

4

7 に答える 7

17

start()run()新しいスレッドでコードを実行します。直接の呼び出しは新しいスレッドでrun()は実行されませんrun()が、スレッドrun()が呼び出された元です。

直接呼び出すとrun()、スレッド化されません。直接呼び出すと、コードが完了 run()するまでブロックされます。新しいスレッドを作成し、のコードがその新しいスレッドで実行されているため、すぐに戻ります。(まあ、技術的にはすぐにではなく、新しいスレッドの作成と開始が完了した後です。)run()start()runstart()

また、スレッドを拡張するのではなく、ランナブルを実装する必要があります。

于 2012-11-29T06:19:28.277 に答える
2

start()を呼び出すと、新しい実行スレッドが作成され、次にrun()が新しく作成されたスレッドで実行されます。

run()を直接呼び出すと、現在のスレッドでコードが実行されます。

于 2012-11-29T06:20:14.190 に答える
2
  • start()を呼び出した後のrun()メソッド:これは、ユーザーが作成したスレッドによって実行され、独立して実行するようにプロセッサーが割り当てられます。

  • run()メソッドが呼び出されました:呼び出し元のスレッドから実行されます。

于 2012-11-29T06:20:23.630 に答える
2

あなたの質問に対する簡単な答えはこれです:

run():run()メソッドでコードを実行し、完了するまでブロックします

start():すぐに(ブロックせずに)戻り、別のスレッドがrun()メソッドでコードを実行します

于 2012-11-29T06:22:06.447 に答える
2

呼び出すとスレッドが開始されます。新しいスレッドを作成して起動するための基本的な作業を実行してから、その新しいスレッドを呼び出します。start run

呼び出すと、現在のスレッドでメソッドrunが呼び出されます。直接電話することはありません。を使用してください。runrunstart

于 2012-11-29T06:22:37.170 に答える
1

1行では、直接呼び出しrun()同期的であり(run()が戻るまでコードはブロックされます)、呼び出しstart()(他のスレッドで呼び出されるため、コードは実行が完了するのを待ちませんobj)は非同期です。

メソッドを直接使用する場合start()、スレッドは、指定されたRunnableインスタンスを使用して一度実行され、その後、スレッドは使用できなくなります。

ただし、Javaに組み込まれているスレッド・プーリングおよびスケジューリング機能を活用するには、RunnableまたはCallableを拡張するのが最善の方法です。

于 2012-11-29T07:20:02.250 に答える
1

start() はスレッドを開始します。run() は、現在のスレッドでコードを実行するだけです。

于 2012-11-29T21:12:57.707 に答える