Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 如何在不使用sun.misc.Unsafe的情况下触发满内存限制?_Java_Multithreading_Memory Fences - Fatal编程技术网

Java 如何在不使用sun.misc.Unsafe的情况下触发满内存限制?

Java 如何在不使用sun.misc.Unsafe的情况下触发满内存限制?,java,multithreading,memory-fences,Java,Multithreading,Memory Fences,我有兴趣在不使用sun.misc.Unsafe的情况下触发一个完整的内存限制 下面的Java代码是否触发了一个完整的内存限制 public final class Foo { public void bar() { // Before memory fence? synchronized(this) { // After memory fence? } } } public final class Foo

我有兴趣在不使用
sun.misc.Unsafe
的情况下触发一个完整的内存限制

下面的Java代码是否触发了一个完整的内存限制

public final class Foo {
    public void bar() {
        // Before memory fence?
        synchronized(this) {
            // After memory fence?
        }
    }
}
public final class Foo {
    private final Object monitor = new Object();
    public void bar() {
        // Before memory fence?
        synchronized(monitor) {
            // After memory fence?
        }
    }
}
下面的Java代码是否也触发了一个完整的内存限制

public final class Foo {
    public void bar() {
        // Before memory fence?
        synchronized(this) {
            // After memory fence?
        }
    }
}
public final class Foo {
    private final Object monitor = new Object();
    public void bar() {
        // Before memory fence?
        synchronized(monitor) {
            // After memory fence?
        }
    }
}
  • 参考:
  • 参考:

你想要实现什么。您只是想阻止“之前”和“之后”操作的重新排序吗?你需要你的操作是原子的吗

要回答这个问题,是的,锁定将具有与满内存限制相同的效果。它将确保您的前后操作不会被重新订购。它还将确保同步块中的所有写入对其他线程可见。此外,您在持有锁时执行的所有操作都将以原子方式进行。仅仅加上一个完整的围栏是不可能实现的

在java中触发完全隔离的另一种方法是写入易失性变量