0

コンストラクターでスレッドを開始してはいけないと言われていますが、この場合this、参照がコンストラクターをどのようにエスケープするかはわかりません。Test基礎となるThread.javaを調べましたが、これを理解できません。

class Test {

    static MyThread thread;

    public Test() {

        thread = new MyThread();
        thread.start();

    }

}

class MyThread extends Thread {

    public void run() {

        //do stuff

    }

}

助けてくれてありがとう。

thread = new MyThread();Threadスーパーコンストラクターを呼び出します:

public Thread() {
    init(null, null, "Thread-" + nextThreadNum(), 0);
}

参照が逃げるのが見えません。

4

1 に答える 1

5

thisスレッドが参照している場合にのみエスケープできますthis(たとえば、内部クラスの場合)

あなたのスレッドは参照していないthisので、これは問題ではありません。

ただし、オブジェクトの作成は一般に副作用がないと予想されます。これは良い考えではありません。

于 2013-01-22T15:07:04.063 に答える