-1

2行で同じスレッドを2回開始し、

new MyThread(0).start();
new MyThread(1).start();

できますか?

4

3 に答える 3

6

これらは同じタイプの異なるインスタンスであり、間違いなく同じスレッドではありません。これを行うことができます。

この表記法により、理由がより明確になります (ただし、出力行を除いて、元のものと同等です)。

Thread instance1 = new MyThread(0); //created one instance
Thread instance2 = new MyThread(1); //created another instance

//we have two different instances now
// let's see if that is true, or not:
System.out.println("The two threads are " + (instance1==instance2?"the same":"different"));

instance1.start(); //start first thread instance
instance2.start(); //start second instance 

//we just started the two different threads

ただし、 の実装によってはMyThread、これ問題を引き起こす可能性があります。マルチスレッド プログラミングは簡単ではありません。スレッド インスタンスはスレッド セーフな方法で動作する必要があり、それを保証するのは簡単ではありません。

推奨読書: Java Concurrency In Practice (Peierls、Bloch、Bowbeer、Holmes、Lea)

于 2012-10-25T07:16:26.920 に答える
3

ドキュメントにあるように、スレッドを複数回開始することはできません。start()既に開始されているスレッドを呼び出すと、IllegalThreadStateException.

ただし、コードはあなたの言うことを実行しません。そのコードで同じスレッドを 2 回開始するのではなくMyThread、開始する 2 つの別個のオブジェクトを作成しています。

于 2012-10-25T07:20:03.517 に答える
1

はい、2 つのスレッドをインスタンス化しているためです。

それらは同じクラス ( ) を持っていますが、Java でキーワードMyThreadを使用するたびに、新しいオブジェクトをインスタンス化します。newこの新しいオブジェクトは、元のオブジェクトとデータを共有できません。2 つの個別MyThreadのオブジェクトを作成しました。一方を開始して他方を開始しないことも、両方を開始することもできます。

于 2012-10-25T07:16:48.697 に答える