gpt4 book ai didi

Java - 线程安全程序

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:40 24 4
gpt4 key购买 nike

考虑以下代码:

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;
}
}

我必须确保它是线程安全的(不会有同步错误)。我对这件事很陌生,所以我的猜测是:

  1. 我们将 synchronized 添加到 add()get() 方法中,并添加 synchronized(Test. class)getList() 方法;

  2. 我们将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com