java-memory-model

    -3熱度

    1回答

    訪問操作和讀/寫操作有什麼區別?我確信讀/寫=訪問。請解釋。 這張幻燈片來自http://www.cs.umd.edu/~pugh/java/memoryModel/Dagstuhl.pdf

    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; 另一

    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上,根據內存模型,可以使用較舊的存儲重新排序「加載」,因此多個線程在多個內

    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();