gpt4 book ai didi

java - Java 多线程程序中的对象可见性

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:16 26 4
gpt4 key购买 nike

我正在阅读Java:实践中的并发,在第三章中,作者写道:

“...不能保证一个线程中的操作将按照程序给定的顺序执行,只要从该线程内检测不到重新排序——即使重新排序对其他线程……”

我知道一个线程中语句的实际执行顺序可能与程序中编写的顺序不同(取决于编译器优化等)。但出于某种原因,我无法破译作者所写的晦涩难懂的陈述。

“...不能保证一个线程中的操作将按照程序给定的顺序执行...”-好的。语句的实际执行顺序可能不同。

“...只要无法从该线程中检测到重新排序——即使重新排序对其他线程来说是显而易见的...”- 是什么意思? ....可从线程内检测到......”

最佳答案

这只是意味着,执行的重新排序不会使您通过查看代码可以对该线程可见的状态做出的任何断言无效。

举个简单的例子:

/* 1 */ x = 0;
/* 2 */ boolean c = x == 0;
/* 3 */ x = 1;

不允许在 2 之前移动 3,因为这会被 c 的值检测到。

换句话说,允许在其他线程查看时可能会产生错误的重新排序,但不允许在线程内创建错误的重新排序 允许。

关于java - Java 多线程程序中的对象可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53768049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com