Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CyclicBarrier的可见性同步?_Java_Synchronization_Visibility_Cyclicbarrier - Fatal编程技术网

Java CyclicBarrier的可见性同步?

Java CyclicBarrier的可见性同步?,java,synchronization,visibility,cyclicbarrier,Java,Synchronization,Visibility,Cyclicbarrier,在Java中使用CyclicBarrier同步线程时,它们是否同步非易失性变量 int a = 0; int b = 0; CyclicBarrier barrier = new CyclicBarrier(2); /*** Thread 1 ***/ public void run() { a = 2; barrier.await(); doSomeStuff(b); // no side-effects } /*** Thread 2 ***/ public v

在Java中使用CyclicBarrier同步线程时,它们是否同步非易失性变量

int a = 0;
int b = 0;
CyclicBarrier barrier = new CyclicBarrier(2);

/*** Thread 1 ***/
public void run() {
    a = 2;
    barrier.await();

    doSomeStuff(b); // no side-effects
}

/*** Thread 2 ***/
public void run() {
    b = 3;
    barrier.await();

    doSomeStuff(a); // no side-effects
}
我们可以确定线程1的doSomeStuff调用b已设置为3吗?
尝试时总是3

是的,正如您从CyclicBarrier类的javadoc中所看到的那样,可见性正如您所期望的那样:

内存一致性影响:调用await()之前线程中的操作发生在作为barrier操作一部分的操作之前,而barrier操作又发生在其他线程中相应的await()成功返回之后的操作之前


是的,正如您从CyclicBarrier类的javadoc中所看到的,可视性正如您所期望的那样:

内存一致性影响:调用await()之前线程中的操作发生在作为barrier操作一部分的操作之前,而barrier操作又发生在其他线程中相应的await()成功返回之后的操作之前


您希望先调用Thread2吗?这有关系吗<代码>线程t1=新线程1();螺纹t2=新螺纹2();t1.start();t2.start()嗯..它不能保证
t1
会在
t2
之前启动。您想先调用Thread2吗?这有关系吗<代码>线程t1=新线程1();螺纹t2=新螺纹2();t1.start();t2.start()嗯..它不能保证
t1
将在
t2
之前启动。。