作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑以下代码:
public class Test
{
private List<Object> list;
public Object get(int id)
{
return list.get(id);
}
public void add(Object el)
{
list.add(el);
}
public List<Object> getList()
{
return list;
}
}
我必须确保它是线程安全的(不会有同步错误)。我对这件事很陌生,所以我的猜测是:
我们将 synchronized
添加到 add()
和 get()
方法中,并添加 synchronized(Test. class)
到 getList()
方法;
我们将 list
和所有方法设为静态,然后我们添加 synchronized
;
这是我想出来的,但可能他们都不对。
最佳答案
您的第 1 点似乎是正确的。我会把 synchronized
放在 get()
和 add()
和 getList()
上,但我不会把任何静态的,而是在调用 getList()
时返回列表的副本。
由于您没有指定是哪种类型,所以我以 ArrayList
为例编写了代码段。
public synchronized List<Object> getList()
{
return new ArrayList<Object>(list);
}
如果您想强调良好实践,您可以返回某种不可变集合,以防止此类的“用户”编辑列表,认为这可能会影响状态。
public synchronized List<Object> getList()
{
return Collections.unmodifiableList(list);
}
关于Java - 线程安全程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44047885/
我是一名优秀的程序员,十分优秀!