3

静的フィールドと静的ブロックを初期化しているスレッドは? 私の実験から、それは「呼び出し」スレッドと同じであると結論付けました。

class Foo {
    static {
        System.err.printf("static {}:   %s\n", Thread.currentThread());
    }
}

public class Mini_StaticInitialization {
    public static void main(final String[] args) {
        System.err.printf("main:        %s\n", Thread.currentThread());
        new Foo();
    }
}

出力

main:        Thread[main,5,main]
static {}:   Thread[main,5,main]

制限はありますか、それとも常にそうですか?

4

4 に答える 4

0

静的ブロック内のコードは、クラスのロード時に実行され、作成するクラスのインスタンスの数に関係なく、一度だけ実行されます。プログラムのメインスレッドで呼び出しスレッドとプログラムが同じスレッドで実行されます。別のスレッドで new Foo() を実行しようとすると、静的初期化が呼び出しスレッドでのみ発生するため、同じ出力が表示されます。

于 2013-10-18T08:14:35.047 に答える