栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

2D易失性数组:自我分配会有所帮助还是我需要AtomicIntegerArray?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2D易失性数组:自我分配会有所帮助还是我需要AtomicIntegerArray?

您确实需要原子性,因为写入数组是非原子性的过程。具体来说,Java绝对不会保证对数组成员的写操作对其他线程 不可见 ,除非您选择发布它们。

一种选择是每次创建一个新数组,对其进行完全初始化,然后在上发布

volatile
,但是由于Java坚持必须首先将新分配的数组先清零,并且由于GC开销,这可能会产生大量成本。您可以使用“双缓冲”方案克服该问题,该方案只保留两个数组并在它们之间切换。这种方法有其危险性:线程可能仍在从您的写入线程已标记为非活动线程的数组中读取数据。这在很大程度上取决于代码的确切细节。

唯一的其他选择是以经典,无聊的代码

synchronized
块进行整个阅读和写作。这具有延迟可预测的优点。就个人而言,我将从此开始,然后继续进行任何更复杂的事情(如果绝对受实际性能问题的困扰)。

您也可以使用读写锁进行锁定,但是只有在多个线程同时读取数组的情况下,这样做才有意义。这似乎不是您的情况。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483727.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号