【发布时间】:2017-10-08 15:30:43
【问题描述】:
我有以下代码:
public class State {
private List<Position> m_track;
public State() {
m_track = Collections.synchronizedList(new ArrayList<Position>());
}
public List<Position> getTrack() {
return m_track;
}
}
// in different class
public void modifyTrack(State _state) {
List<Position> local_track = _state.getTrack();
synchronized (local_track) {
// safely modify track
}
}
但是Android Studio在线synchronized (local_track)给了我一个警告:
本地变量“local_track”报告的同步 局部变量或参数的同步。
当使用这种同步时,很难保证正确性。
可以通过控制访问来改进这样的代码,例如同步包装类,或通过在字段上同步。
如果我用synchronized (_state.getTrack()) 替换synchronized (local_track),警告就会消失。
如果我理解正确,我的local_track 只是一个引用,没有创建新对象,如果是这样,为什么我不能同步它?
【问题讨论】:
-
忽略它。它不知道它在说什么。
-
@EJP,非常感谢
-
阅读 Java 命名约定。 "" 仅适用于 SOME_CONSTANT。您不会在其他任何地方使用它。大多数 Java 编码风格指南也不鼓励使用“m”来表示“它是一个字段”。
标签: java multithreading android-studio synchronization