- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Brian Goetz 等人在 Java Concurrency in Practice 中提供了以下示例(缩短了 list 4.11)。
public class SafePoint {
private int x, y;
public SafePoint(int x, int y) {
this.x = x;
this.y = y;
}
public synchronized int[] get() {
return new int[] { x, y };
}
public synchronized void set(int x, int y) {
this.x = x;
this.y = y;
}
}
它真的是线程安全的吗? x 和 y 既不是 volatile 的也不是最终的,并且它们的设置没有锁定,这意味着调用 get() 的另一个线程可能会看到陈旧的值(零)。我在这里错过了什么吗?
最佳答案
Is it really thread-safe?
是的。
x and y are neither volatile nor final,
正确,但是......
and they are set without locking on this
不正确。 get 和 set 方法是同步
方法,这意味着它们隐式锁定并同步this
。
实际上......对此有一个警告。在创建 SafePoint
实例和(第一个)get
或 set
之间,还必须有一个发生在之前调用其他线程。如果没有,则 get
或 set
可能会看到 x
和 y
的默认值code> 而不是传递给构造函数的值。
Goetz 等人在 Java 并发实践的下一页中介绍了这一点......尽管他们使用比 hb 关系更高级别的推理。在 list 4.12 中,他们使用 ConcurrentHashMap 来确保 SafePoint 安全发布。
关于java - JCIP SafePoint - 它真的是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46827407/
Brian Goetz 等人在 Java Concurrency in Practice 中提供了以下示例(缩短了 list 4.11)。 public class SafePoint { priva
在《Java Concurrency in Practice》一书中,您可以找到以下代码: @ThreadSafe public class SafePoint { @GuardedBy("t
Java 应用程序使用以下标志运行:-XX:+PrintSafepointStatistics,然后在标准输出控制台上生成以下行: 2 个 VM 操作在安全点期间合并 谁愿意解释一下这是什么意思? 更
在 Brian Goetz 的 Java Concurrency in Practice 中有以下示例(缩短了 list 4.11)。 public class SafePoint { pri
我们在 AWS 上运行的 Ubuntu 服务器上发生了一次难以捉摸的 jvm 崩溃。 我们的 JVM 在抓取一些网页时崩溃了。 崩溃发生在“安全点”cpp 模块的第 308 行。在 gaurantee
我正在使用 -Xlog:safepoint+stats=debug:file=safepoint.log vm 参数在 JDK12 上运行应用程序以记录安全点操作并使用 ZGC 运行。我无法理解日志输
我是一名优秀的程序员,十分优秀!