很多读者,一位作家:我需要同步吗?

Jan*_*ing 4 java synchronized

我需要同步这个,当许多线程访问get方法并且只有一个线程正在访问setList方法时?

public class ListContainer {
  private List<String> myList = new ArrayList<String();

  public List<String> get ( )
  {
    return new ArrayList<String>(myList);
  }

  public List<String> set ( )
  {
    this.myList = computeList();
  }
}
Run Code Online (Sandbox Code Playgroud)

我不在乎读者是否获得旧数据,但数据应该是一致的.

Janning

axt*_*avt 5

如果满足以下条件,则不必同步(但必须声明myListvolatile):

  • computeList 不依赖于当前的状态 myList
  • 分配后的列表内容不会更改(Collections.unmodifiableList(computeList())表达此条件的更好方法)