gpt4 book ai didi

java - 安全地使用/交换 Collections.synchronizedList

转载 作者:行者123 更新时间:2023-12-02 02:43:37 25 4
gpt4 key购买 nike

在多线程应用程序中,我们有一个在单例中处理列表的方法。要获取列表的快照,我们需要执行以下操作:

public List swapList() {
if (syncLinkedList.isEmpty()) {
return null;
}
List currentList = normalLinkList;
normalLinkList = new LinkedList();//java.util.LinkedList.LinkedList()
syncLinkedList = Collections.synchronizedList(normalLinkList);
return currentList;
}

一个线程在单例之上进行处理。

另一个对象在许多具有套接字的线程上接收请求,在许多线程上将新请求添加到syncLinkedList,如下所示:

syncLinkedList.add(obj);

这是交换单例的安全方法吗?

7 月 11 日更新:项目是否会出现在两个列表之一(currentList 或新的normalLinkList)中?只要元素在其中之一,我们就应该没问题。

最佳答案

简短回答您的swapList不安全。

一些解释:虽然它产生线程安全的结果,但方法 swapList 本身并不是线程安全的。

解决此问题的最简单方法是使用 synchronized 修饰符对其进行标记。

关于java - 安全地使用/交换 Collections.synchronizedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45017374/

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