相关疑难解决方法(0)

非最终字段的同步

每次在非最终类字段上同步时都会显示警告.这是代码:

public class X  
{  
   private Object o;  

   public void setO(Object o)  
   {  
     this.o = o;  
   }  

   public void x()  
   {  
     synchronized (o) // synchronization on a non-final field  
     {  
     }  
   }  
 } 
Run Code Online (Sandbox Code Playgroud)

所以我用以下方式改变了编码

 public class X  
 {  

   private final Object o;       
   public X()
   {  
     o = new Object();  
   }  

   public void x()  
   {  
     synchronized (o)
     {  
     }  
   }  
 }  
Run Code Online (Sandbox Code Playgroud)

我不确定上面的代码是在非final类字段上同步的正确方法.如何同步非最终字段?

java multithreading synchronized

81
推荐指数
3
解决办法
5万
查看次数

锁定可变对象 - 为什么它被认为是一种不好的做法?

看到这个答案.它说:

六个非常糟糕的例子;

...

锁定可变字段.例如synchronized(object){object = ...; }

锁定可变字段有什么问题?如果object被声明为final但不是不可变类?

java concurrency multithreading synchronized thread-safety

8
推荐指数
2
解决办法
1817
查看次数