在java中,访问同步对象

在java中,访问同步对象,java,multithreading,synchronization,Java,Multithreading,Synchronization,[已编辑] 这是关于Java中对象的同步。我有疑问,需要澄清 如果我同时访问两个线程中的对象 通过一个线程访问其方法,然后在另一个线程中将对象重新初始化为null。 这个对象可以被同步吗 您不能“使对象为空”。如果一个线程通过一个变量访问一个对象,而另一个线程则将该变量设置为null,那么第一个线程仍然具有对该对象的引用,并且可以访问该对象。如果第二个线程首先运行,即将变量设置为null,则第一个线程首先无法获取该引用 例如: MyThreadsafeObject ref = new MyThr

[已编辑] 这是关于Java中对象的同步。我有疑问,需要澄清

如果我同时访问两个线程中的对象 通过一个线程访问其方法,然后在另一个线程中将对象重新初始化为null。 这个对象可以被同步吗

您不能“使对象为空”。如果一个线程通过一个变量访问一个对象,而另一个线程则将该变量设置为null,那么第一个线程仍然具有对该对象的引用,并且可以访问该对象。如果第二个线程首先运行,即将变量设置为null,则第一个线程首先无法获取该引用

例如:

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
不为空,您就可以在对象上进行同步。

对象不为空。引用为空。不清楚你在问什么。