2016-07-21 3 views
-4

[編集] これは、Javaのオブジェクトの同期に関するものです。私は疑いがあり、明確化が必要です。Javaの場合、同期オブジェクトへのアクセス

両方のスレッドのオブジェクトに同時にアクセスしている場合 あるスレッドと別のスレッドでそのメソッドにアクセスすると、nullとしてオブジェクトが再初期化されます。 このオブジェクトは同期できますか?

+0

オブジェクトはnullではありません。参照はnullです。あなたが何を求めているのか不明です。 – EJP

答えて

0

"オブジェクトを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でない限り、オブジェクトを同期することができます。

関連する問題