【发布时间】:2014-01-20 20:47:43
【问题描述】:
Java Concurrency in Practice 解释了这个概念:
当一个线程在没有同步的情况下读取一个变量时,它可能会看到一个 陈旧的值,但至少它看到了一个实际放置的值 有一些线程而不是一些随机值。这种安全 保证被称为无中生有的安全。
这种类型的安全性是否弱,因为它可能包含陈旧的值?
也许提到这个 sn-p,at least it sees a value that was actually placed there by some thread than some random value,是因为本书的上一个主题是 JVM 参考 sharing variables without synchronization 对变量语句重新排序的可能性?
示例:取决于重新排序:42 或 0 可以打印出来。
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while(!ready)
Thread.yield();
System.out.println(number);
}
}
public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready = true;
}
}
已编辑 - 删除了“请发表评论”。
【问题讨论】:
-
请评论不是开始 SO 问题的好方法。您有具体问题需要我们回答吗?
-
对我来说似乎离题了? “您应该只根据您所面临的实际问题提出实用、可回答的问题。喋喋不休的开放式问题会降低我们网站的实用性,并将其他问题推到首页之外。”
-
@Keppil - 好点,谢谢。我将删除该部分并保留关于属性强度的原始问题。
-
@KevinMeredith 抱歉,“低度数”到底是什么意思?我用谷歌搜索了这个词,没有找到任何东西。这是一个标准的、定义明确的术语,还是只是一个主观的衡量标准?因为如果是后者,在不知道你的主观线在哪里的情况下很难回答这个问题。
-
@yshavit,虽然我没有明确说明,但格雷的回答满足了我措辞不佳的问题。基本上我想更多地了解
out of thin air safety的含义。
标签: java multithreading