将帖子 这是关于Java中对象的同步。我有疑问,需要澄清。
如果我同时访问两个线程中的对象 通过一个线程和另一个线程访问其方法,将对象重新初始化为null。 这个对象可以同步吗?
答案 0 :(得分:0)
你不能使对象为空"。如果一个线程通过变量和另一个线程访问对象,则将该变量设置为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
在启动块时不是null,您就可以同步对象。