gpt4 book ai didi

java - 如何在线程安全环境中定义静态Arraylist

转载 作者:行者123 更新时间:2023-12-01 07:40:05 27 4
gpt4 key购买 nike

如何在线程安全环境中定义静态Arraylist。我尝试过synchronized关键字,但我听说使用java并发包中的Automic类是静态数组列表的最佳解决方案。有人能告诉我如何以安全的方式声明和使用静态数组列表吗?

更新:

在我的代码中,我有一个静态列表来维护应用程序中登录的详细信息

private static List<UserSessionForm> userSessionList = new ArrayList<UserSessionForm>();

在登录和访问主页期间(所有访问主页的时间)检查 userSessionList 中的用户详细信息,如果不可用,则在 userSessionList 中添加详细信息,并在注销期间从列表中删除用户详细信息。登录期间

if (getUserSessionIndex(uform)!=-1) {
this.getUserSession().add(usform);
this.getSession().setAttribute("customerId", getCustomer_id());
}

注销期间

  public void logout(){
int index = getUserSessionIndex(usform);
//if user is already loginned, remove that user from the usersession list
if (index != -1) {
UserAction.getUserSession().remove(index);
}
}

private int getUserSessionIndex(UserSessionForm usform) {
int index = -1;
int tmp_index = 0;
for (UserSessionForm tmp : UserAction.getUserSession()) {
if (usform.equals(tmp)) {
if (usform.getUserlogin_id() == tmp.getUserlogin_id()) {
index = tmp_index;
break;
}
}
tmp_index += 1;
}
return index;
}

因此读写请求有可能同时发生

最佳答案

这在很大程度上取决于您将如何使用它。有几种选择:

  • 使用CopyOnWriteArrayList - 这是一种现代并发实现,最适合写入相对较少而读取较多的情况
  • 使用通过 Collections.synchronizedList 获得的同步包装器- 它允许您访问“原始”未同步列表,例如在包含对象内,但提供对“外部世界”的线程安全访问。

Vector 是一个旧的、过时的集合实现,不应在新代码中使用。

关于java - 如何在线程安全环境中定义静态Arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6096237/

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