Java:在基元上同步?

2023-12-19

在我们的系统中,我们有一个方法,当使用特定 ID 调用它时,它会执行一些工作:

public void doWork(long id) { /* ... */ }

现在,这项工作可以针对不同的 ID 并发完成,但如果 2 个线程使用相同的 ID 调用该方法,则一个线程应该阻塞直到完成。

最简单的解决方案是拥有一个从长 ID 映射到我们可以锁定的任意对象的 Map。我预见到的一个问题是,我们的系统中可能有大量的 ID,而这张地图每天都会不断增长。

理想情况下,我认为我们需要一个系统,其中每个线程都会获取一个锁对象,在可能的情况下锁定,完成工作,然后发出信号表明我们已完成锁定。如果很明显没有其他人在使用这个特定的锁,那么可以安全地将其从锁映射中删除,以防止内存泄漏。

我想这一定是一个非常常见的场景,所以我希望有一个现有的解决方案。有谁知道吗?


不久前我为自己发明了一个类似的东西。我称其为等价类锁,意思是,它锁定与给定事物相等的所有事物。你可以得到它来自我的github http://github.com/jdf/equivalence-lock/blob/master/src/jdf/EquivalenceLock.java,并根据 Apache 2 许可证使用它(如果您愿意),或者只是阅读它并忘记它!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:在基元上同步? 的相关文章

随机推荐