相关疑难解决方法(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万
查看次数

吸气剂和二传手应该同步吗?

private double value;

public synchronized void setValue(double value) {
    this.value = value;
}
public double getValue() {
    return this.value;
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,让getter同步有什么意义吗?

java synchronized

58
推荐指数
2
解决办法
3万
查看次数

需要在getter和setter中同步

可能是一个非常愚蠢的问题.只想证实我的理解.

class Test
{
       private volatile String id;

       public void setID(String id)
       {
             this.id = id;
       }

       public String getID()
       {
             return id;
       }
}
Run Code Online (Sandbox Code Playgroud)

让我们说多个线程可以访问上面的类的对象.我的理解是,如果像上面那样简单的getter和setter(做简单的初始化),我不需要让这些方法同步,对吗?
我想volatile是必需的,否则id的值可能会在不同的线程中过时.
那么,如果我们没有这些方法同步,任何人都可以看到任何问题吗?

java multithreading

5
推荐指数
1
解决办法
3178
查看次数

标签 统计

java ×3

multithreading ×2

synchronized ×2