2016-07-21 4 views
-4

[Отредактировано] Это касается синхронизации на объекте в Java. Я сомневаюсь и нуждаюсь в разъяснении.В java, Доступ к синхронизированным объектам

Если я получаю доступ к объекту в обоих потоках одновременно Доступ к его методу одним потоком, а в другом потоке - повторная инициализация объекта как null. Можно ли синхронизировать этот объект?

+0

Объекты не имеют значения. Ссылки равны нулю. Неясно, что вы спрашиваете. – EJP

ответ

0

Вы не можете «сделать объект нулевым». Если один поток обращается к объекту через переменную и другой поток, то устанавливает эту переменную в нуль, первый поток все еще имеет ссылку на этот объект и может получить к нему доступ. Если второй поток выполняется первым, то есть устанавливает переменную в нуль, первый поток не может получить эту ссылку в первую очередь.

Пример:

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(); 

Здесь первый поток, который запускается все еще может использовать объект, который был передан в то время как второй поток не может, как он получает нулевую ссылку.

Если с вашим вопросом вы имеете в виду что-то вроде synchronized(ref) { ... }, тогда вы сможете синхронизировать объект, пока ref не имеет значения null при запуске блока.

Смежные вопросы