[編集] これは、Javaのオブジェクトの同期に関するものです。私は疑いがあり、明確化が必要です。Javaの場合、同期オブジェクトへのアクセス
両方のスレッドのオブジェクトに同時にアクセスしている場合 あるスレッドと別のスレッドでそのメソッドにアクセスすると、nullとしてオブジェクトが再初期化されます。 このオブジェクトは同期できますか?
[編集] これは、Javaのオブジェクトの同期に関するものです。私は疑いがあり、明確化が必要です。Javaの場合、同期オブジェクトへのアクセス
両方のスレッドのオブジェクトに同時にアクセスしている場合 あるスレッドと別のスレッドでそのメソッドにアクセスすると、nullとしてオブジェクトが再初期化されます。 このオブジェクトは同期できますか?
"オブジェクトをnullにする"ことはできません。あるスレッドが変数を介してオブジェクトにアクセスし、別のスレッドがその変数をnullに設定した場合、最初のスレッドはそのオブジェクトへの参照を持ち、アクセスできます。第2のスレッドが最初に実行される、すなわち変数をヌルに設定する場合、第1のスレッドは最初にその参照を得ることができない。
例:
MyThreadsafeObject ref = new MyThreadsafeObject();
//start another thread and pass in the reference
new Thread(new MTOHandler(ref)).start();
ref = null;
//start a 3rd thread and pass in the now-null reference
new Thread(new MTOHandler(ref)).start();
ここで開始された最初のスレッドは、まだ第二のスレッドは、それがnull参照を取得していることができないようしながら、渡されたオブジェクトを使用することができます。
ご質問でsynchronized(ref) { ... }
のようなものがある場合は、ブロックを開始するときにref
がnullでない限り、オブジェクトを同期することができます。
オブジェクトはnullではありません。参照はnullです。あなたが何を求めているのか不明です。 – EJP