线程安全代码

时间:2018-04-01 06:51:33

标签: java thread-safety

正在进行并发arraylist或并发映射(称之为MainMap)并使用相同的索引对其执行写入/更新仍然是线程老化操作

1 个答案:

答案 0 :(得分:0)

正确答案是线程安全 1 取决于mainMap的类型以及其他线程如何使用它。

  • 如果mainMap是并发地图,那将是安全的。

  • 如果mainMap安全发布且有效,那将是安全的 不可变的。

  • 否则,它不是线程安全的。

在当前线程读取它的同时,没有其他内容可以更新它是不够的。你必须考虑内存模型。

<强>更新

额外的代码告诉我们代码不会受到低级别内存异常的影响。它是否严格依赖于线程取决于操作的预期语义的精确规范。

问题是您正在两个不同的数据结构上执行原子操作。一系列原子操作不一定是原子操作。这是否重要取决于您期望 getValue和setValue方法的行为方式。

1 - 线程安全的经典定义是,线程安全程序是根据其规范对该语言的语义允许的所有执行行为的程序(或语言实现的)多线程执行模型。正如您所看到的,它预先假定程序本身有某种规范。