小编sto*_*man的帖子

Java并发场景 - 我是否需要同步?

这是交易.我有一个哈希映射,包含我称之为"程序代码"的数据,它存在于一个对象中,如下所示:

Class Metadata
{
    private HashMap validProgramCodes;
    public HashMap getValidProgramCodes() { return validProgramCodes; }
    public void setValidProgramCodes(HashMap h) { validProgramCodes = h; }
}
Run Code Online (Sandbox Code Playgroud)

我有很多很多的读取器线程,每个读取器线程都会调用getValidProgramCodes()一次,然后将该hashmap用作只读资源.

到现在为止还挺好.这是我们感兴趣的地方.

我想放入一个计时器,每个计时器都会生成一个新的有效程序代码列表(不管怎么做),并调用setValidProgramCodes.

我的理论 - 我需要帮助验证 - 是我可以继续按原样使用代码,而不需要进行显式同步.它是这样的:在更新validProgramCodes时,validProgramCodes的值总是很好 - 它是指向新的或旧的hashmap的指针. 这是一切都取决于的假设. 拥有旧hashmap的读者可以; 他可以继续使用旧值,因为它不会被垃圾收集,直到他释放它.每个读者都是暂时的; 它很快就会消亡,并被一个将获得新价值的新人所取代.

这有水吗?我的主要目标是在绝大多数没有更新的情况下避免代价高昂的同步和阻塞.我们每小时只更新一次,读者不断闪烁.

java concurrency

16
推荐指数
2
解决办法
3194
查看次数

标签 统计

concurrency ×1

java ×1