Java,从多个线程编辑数组
Java, editing array from multiple threads
我有很多大小为 4096 (16x16x16) 的字节数组,我想一次从多个线程编辑它们,任何元素一次被多个线程写入的可能性很小,而且几乎一次(写入或读取)不可能有超过 3 个访问它(元素之一)。
但是整个数组可以同时被多个线程访问。
这会导致任何问题吗?如果是,那么如何fix/avoid他们呢?
我知道阅读应该是安全的,听说写作有些问题
代码需要快速(基于实时的东西)所以我不能同步它,我不能使用任何 ArrayList,因为这会导致内存问题。 (将会有 1000-20000 个(甚至更多)这样的数组)
每当有人在与 Java 相同的句子中说实时时,我的兴趣就会达到顶峰,因为实时具有大多数人不理解的特定含义(oracle / sun 有一个实时 jvm 可用于购买)
但我跑题了,数组读写是原子的,因此是线程安全的。 2 个线程不能同时写入数组,因为操作不能分解为更小的东西(允许调度程序中途中断)只要你小心(例如不读取值,做一些数学运算然后写入它返回数组并期望给定索引处的值保持不变)
所以简而言之,只要您围绕它的逻辑也是线程安全的,就没有什么可以阻止您这样做。
我有很多大小为 4096 (16x16x16) 的字节数组,我想一次从多个线程编辑它们,任何元素一次被多个线程写入的可能性很小,而且几乎一次(写入或读取)不可能有超过 3 个访问它(元素之一)。
但是整个数组可以同时被多个线程访问。
这会导致任何问题吗?如果是,那么如何fix/avoid他们呢?
我知道阅读应该是安全的,听说写作有些问题
代码需要快速(基于实时的东西)所以我不能同步它,我不能使用任何 ArrayList,因为这会导致内存问题。 (将会有 1000-20000 个(甚至更多)这样的数组)
每当有人在与 Java 相同的句子中说实时时,我的兴趣就会达到顶峰,因为实时具有大多数人不理解的特定含义(oracle / sun 有一个实时 jvm 可用于购买)
但我跑题了,数组读写是原子的,因此是线程安全的。 2 个线程不能同时写入数组,因为操作不能分解为更小的东西(允许调度程序中途中断)只要你小心(例如不读取值,做一些数学运算然后写入它返回数组并期望给定索引处的值保持不变)
所以简而言之,只要您围绕它的逻辑也是线程安全的,就没有什么可以阻止您这样做。