作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个 Java 类是线程安全的吗?
class Counter() {
private Long counter = 0;
Long get() { return counter; }
Long inc() { return ++counter; }
}
如果不是,是否可以在不显式使用锁(或 synchronized
关键字)的情况下使其成为线程安全的?如果没有,那么我想以下是实现我的目标的最简单方法?
class Counter() {
private final AtomicLong counter = new AtomicLong(0);
Long get() { return counter.get(); }
Long inc() { return counter.incrementAndGet(); }
}
最佳答案
不,第一个例子不是线程安全的,因为 ++counter
不是原子的。例如,没有什么可以阻止两个线程同时执行 ++counter
并丢失其中一个增量。
第二个示例是线程安全的,这意味着不会丢失任何增量。值得注意的是,get()
和 inc()
返回的值在调用者收到它时很可能已过时。
关于java - 长线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15478374/
我是一名优秀的程序员,十分优秀!