我々はJavaでオブジェクトのコンストラクタ内のオブジェクトの同期メソッドを呼び出すことができますか?

主:

私は、Javaに新しいです。コンストラクタ内で同期メソッドを呼び出すことが可能である場合、私は疑問に思って。例があります:

class a{
    int a1;

    public a(){
        a1 = 1;
        increment();
    }

    private synchronized void increment(){
        a1++;
    }
}

これは、おもちゃの一例です。私は、コンストラクタで2にA1を設定することができます。私はちょうど私たちが呼び出すことができるかどうか混乱していますincrement()コンストラクタの内部やありません。

davidxxx:

あなたはそれを行うことができますが、同期メソッドは、現在作成されているインスタンスがロックされますので、その同期は無意味です。それがまだ作成されて返されていないながら、しかし、他のどのスレッドにアクセスすることができましたか?誰も。
あなたは、このような渡していないと良いプラクティスに従うようコンストラクタは確かに事実上限り、スレッドセーフですthis他のクラスに/コンストラクタ本体内のオブジェクト。
あなたの例では、とのより多くの意味を作ることができるsynchronized static方法またはsynchronized上のstaticフィールド。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=185140&siteId=1