gpt4 book ai didi

Java并发: should I synchronize all List and Maps?

转载 作者:行者123 更新时间:2023-12-02 07:55:36 26 4
gpt4 key购买 nike

所以我有一个 SomeTask 类,它扩展了 Thread,并且它具有 MapList 字段。当您不执行 Collections.synchronizedXXX 并且您有多个线程运行 SomeTask 时,会出现什么行为?

一旦从数据库调用Map(我使用对象数据库直接存储POJO),我是否还需要同步从该数据库返回的Map对象?

Map SomeTasksOwnMap = Collections.synchronizedMap(MapReturnedFromDatabase);

最佳答案

Collections.synchronizedXXX 当 2 个或更多线程访问同一个 Map/List 时需要。

如果您的任务不访问其他任务Map/List,则无需同步它们。

示例。

  • 任务 1 构建一个能被 2 整除的数字列表。
  • 任务 2 构建一个能被 3 整除的数字列表。

这两个任务具有不需要同步的单独列表。

示例需要同步。

  • 任务 1 和 2 都计算数字并将其存储在共享列表中。

要回答以下问题:“如果不这样做,会出现什么行为”,如果两个线程都想写入索引“x”,则可能会丢失其中一个写入。

列表中也可能有空值,因为在写入该位置之前数组的大小已增加。

基本上你会得到不一致的 View 。

关于Java并发: should I synchronize all List and Maps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9695574/

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