2行で同じスレッドを2回開始し、
new MyThread(0).start();
new MyThread(1).start();
できますか?
これらは同じタイプの異なるインスタンスであり、間違いなく同じスレッドではありません。これを行うことができます。
この表記法により、理由がより明確になります (ただし、出力行を除いて、元のものと同等です)。
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)
ドキュメントにあるように、スレッドを複数回開始することはできません。start()
既に開始されているスレッドを呼び出すと、IllegalThreadStateException
.
ただし、コードはあなたの言うことを実行しません。そのコードで同じスレッドを 2 回開始するのではなくMyThread
、開始する 2 つの別個のオブジェクトを作成しています。
はい、2 つのスレッドをインスタンス化しているためです。
それらは同じクラス ( ) を持っていますが、Java でキーワードMyThread
を使用するたびに、新しいオブジェクトをインスタンス化します。new
この新しいオブジェクトは、元のオブジェクトとデータを共有できません。2 つの個別MyThread
のオブジェクトを作成しました。一方を開始して他方を開始しないことも、両方を開始することもできます。