java-memory-model

    0热度

    1回答

    我的问题与this post有关。 public class SafeDCLFactory { private volatile Singleton instance; public Singleton get() { if (instance == null) { // check 1 synchronized(this) { if (in

    2热度

    2回答

    考虑下面的代码示例: try (AutoClosable closable = new XXX()) { o.method1(closable); o.method2(); } 难道Java内存模型允许热点重新排序closable.close()o.method2()过吗? 我故意忽略像这样的执行细节吗?方法1捕获可关闭吗?在这个问题的第一部分。 我spefic的使用

    0热度

    1回答

    我有一个需求,我需要在完成时发布'n'个线程的结果。为了检查所有线程是否完成,我使用AtomicInteger(incrementAndGet())并将其值与最终变量进行比较。在做检查之前,我正在将单个线程的结果写入共享对象(并发哈希表,因为非同步数据结构dint似乎足够了)。所以,我的问题是,在我的计数器通过'if'条件之前,所有线程是否会完整写入共享对象(并且主线程是否能够看到一致的内存)?

    2热度

    2回答

    我有下面(源 - https://mechanical-sympathy.blogspot.in/2011/09/single-writer-principle.html)的发言几个澄清的: “86/64有一个存储器模型,由此加载/存储存储器操作都保留命令,从而存储如果你严格遵守单一作者原则,就不需要屏障。 在x86/x64上,根据内存模型,可以使用较旧的存储重新排序“加载”,因此多个线程在多个内

    -3热度

    1回答

    访问操作和读/写操作有什么区别?我确信读/写=访问。请解释。 这张幻灯片来自http://www.cs.umd.edu/~pugh/java/memoryModel/Dagstuhl.pdf

    1热度

    1回答

    我在java中有一个读写器线程,下面是代码片段。 int volatile ready = false; int var1; int var2; int var3; T1: while(!ready); print var1; print var2; print var3; T2: var1 = 1; var2 = 2; var3 = 3;

    0热度

    1回答

    class C { Object o; public void set(Object o){ if(this.o == null){ this.o = o; } } public Object get(){ return o; } } C c = new C(); C c = new C();

    0热度

    1回答

    我试图调查在java环境中重新排序(使用JDK 9-ea + 170)的行为,并发现我无法为自己解释的一件事,所以我很乐意听到关于它的一些说明。下面是一个例子: public class Client { int x; int y; public void test() { x++; y++; } public static

    1热度

    2回答

    下阅读对象的字段这个职位是阅读后提出:https://shipilev.net/blog/2016/close-encounters-of-jmm-kind/#pitfall-semi-sync class Box { int x; public Box(int v) { x = v; } } class RacyBoxy { Box box

    1热度

    1回答

    您是否应该将商店门槛放入构造函数中? 下面是一个例子。首先假设global_f = f = r = 0。 一个线程A创建一个对象,分配给一个字段,并将其分配给一个全局变量: class Foo { int x; void Foo(int x) { this.x = x; } } f = new Foo(42); global_f = f; 另一