gpt4 book ai didi

java - 同步和可见性

转载 作者:行者123 更新时间:2023-12-03 12:56:39 24 4
gpt4 key购买 nike

// In Thread1  
x=5;
synchronization(obj)
{
// do something (no operations involving x)
}

// In thread 2
synchronization(obj)
{
// do something(operations involving x)
}

是否有要求 JVM 在进入该 block 之前首先执行同步块(synchronized block)之前的所有语句。在 Thread-1 中,因为同步块(synchronized block)与 x 没有任何操作。能不能先执行同步块(synchronized block)再赋值操作 x=5 .

对于 x 的值,Thread-2 会看到什么?在其同步块(synchronized block)中。假设首先执行 Thread-1,然后执行 Thread-2,并且它们都在同一个对象上运行, x = 0创建对象时。

我们可以说 Thread-1 中的同步块(synchronized block)发生在 Thread-2 中的同步块(synchronized block)之前。那么 x 的值应该是多少?在 Thread-2 的同步块(synchronized block)中?

最佳答案

是否有要求 jvm 在进入该 block 之前首先执行同步块(synchronized block)之前的所有语句

是的。 http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/package-summary.html说:

Each action in a thread happens-before every action in that thread that comes later in the program's order.



假设对 x 的赋值发生在第一个同步块(synchronized block)执行之前,并且第一个同步块(synchronized block)执行发生在第二个同步块(synchronized block)执行之前,那么在第一个线程中分配给 x 的值将对第二个线程可见。 (happens-before 是及物的)。

关于java - 同步和可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10434745/

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