Java-请帮忙看看为什么在多线程情况下偶然会获得相同id?

发布于 2017-02-01 21:20:34 字数 241 浏览 1322 评论 3

小弟写了一个用在多线程的ID生成器,但偶然情况下会获得相同ID,请各位帮忙看看?

public class IDGenerator{
private static long id = 0;

public static long getID(){
return id++;
}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虐人心 2017-06-17 06:38:51

id++; 多线程要加锁。否则就可能出现相同的。

甜柠檬 2017-05-24 04:44:16

在jvm中自增不是原子性操作,它包含一个读操作和一个写操作。所以id++不是线程安全的,需要加锁。还有一种方式,可以将Long id改为AtomicInteger id,AtomicInteger是线程安全的。AtomicInteger是jdk1.5中提供的,在java.util.concurrent包中。如果要写多线程的操作可以好好看看java.util.concurrent提供的类。

灵芸 2017-05-06 05:47:02

++操作非原子操作 会出现不一致性的 具体应用要注意并发问题,需要考虑在并发环境下,具体可以参考java.util.concurrent包 看看java并发开发的一些书籍之类的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文