单个写入器以及多个写入器线程的volatile vs synchronized

时间:2017-09-14 09:49:53

标签: java multithreading concurrency

第一个类在setter之前使用synchronized关键字,而在第二个类中,我只是将String字段标记为volatile

public class MyBean{
      private String strValue;

      public synchronized void setStrValue(String strValue){
        this.strValue=strValue;
      }

    public String getStrValue(){
     return strValue
    }

}

public class MyBean{
          private volatile String strValue;

         public void setStrValue(String strValue){
            this.strValue=strValue;
          }

        public String getStrValue(){
         return strValue
        }

    }

从另一个线程更新的一个线程中,这两段代码是否与读取更新值有关?

e.g。如果同一个MyBean实例传递给两个线程 - 线程 - A& thread - B,如果target要有线程 - 在线程-B完成修改后读取更新的值,这两个代码从那个角度来看是否相同?

此外,在第二个版本中(即当字段标记为volatile时) - 如果多个线程可以作为编写者,是否必须在setter之前放置synchronizedvolatile对于setter方法的多个编写器的情况有意义吗?

如果只有一个编写器线程,我的假设是否正确,两个代码是等价的? 对于多个作者的情况,正确的版本是使用synchronized还是volatile两者(如果不想阻止读者)?

0 个答案:

没有答案