Вы не можете «сделать объект нулевым». Если один поток обращается к объекту через переменную и другой поток, то устанавливает эту переменную в нуль, первый поток все еще имеет ссылку на этот объект и может получить к нему доступ. Если второй поток выполняется первым, то есть устанавливает переменную в нуль, первый поток не может получить эту ссылку в первую очередь.
Пример:
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 при запуске блока.
Объекты не имеют значения. Ссылки равны нулю. Неясно, что вы спрашиваете. – EJP