0

Javaでこのようなことをすることは可能ですか? ちょっと思ったんです。

まず、1 つの引数を持つ新しいスレッドを作成します。

Thread thread = new Thread(new Person());

次に、 Person() のコンストラクターで、そのスレッドを開始したいと思います。では、このようなことは可能なのでしょうか?

public Person() {
    // Here belongs some code for the constructor and then
    // I would like to start the thread
}
4

3 に答える 3

2

いいえ、できません。Java がThread()コンストラクターを呼び出す前に、コンストラクターの呼び出しを含むすべての引数を積極的に評価する必要がありますPerson()。これは、Personコンストラクターが呼び出されるまでに、外側のThreadオブジェクトが存在しないか、まだ初期化されていないため、実際には使用できないことを意味します。

于 2013-01-30T21:58:52.373 に答える
1

いいえ。

Personコンストラクター内のスレッドへの参照がありません。したがって、スレッドはまだ存在しません。

あなたがそれを持っていたとしても、次のようなことをします

 public Person() {
   Thread a = new MyThread(this);
 }

this完全に初期化されていない可能性のあるインスタンス ( ) を渡しているためです。

于 2013-01-30T22:00:09.097 に答える
0

これはあなたが探しているものですか?これを使用すると、コンストラクターの{start()}呼び出しに関するすべての問題が回避されることに注意してください。start

  new Thread() {
    { start(); }
    public void run() {
     ...
    }
  };

ここでオリジナルを見ることができます。

于 2013-01-30T22:11:10.410 に答える