Java并发 - 写入同一个数组的不同索引

Joh*_*gan 33 java concurrency multithreading

假设我有一个数据数组,2个线程可以安全地同时写入同一个数组的不同索引吗?我关心写入速度,我想同步'get index to write at'位与实际写入.

我正在编写代码,让我假设2个线程不会获得相同的索引.

aio*_*obe 36

对于数组中的两个不同索引,相同的规则适用于两个单独的变量.

Java语言规范中的"线程和锁定"一章首先说明:

17.4.1共享变量

[...]

所有实例字段,静态字段和数组元素都存储在堆内存中.在本章中,我们使用术语变量来指代字段和数组元素.

这意味着您可以安全地同时写入两个不同的索引.但是,如果要确保使用者线程看到生产者线程写入的最后一个值,则需要将写入/读取同步到同一索引.

  • 不,因为它不算作Java实现,对吧?:) (3认同)

Tom*_*icz 11

在两个不同的线程中修改两个不同的变量是安全的.可以将修改阵列中的两个不同元素与在不同存储器地址下修改两个不同变量进行比较,至少就OS而言.所以是的,它是安全的.