Tag: volatile

AtomicInteger和volatile

我知道volatile允许可见性, AtomicInteger允许primefaces性。 因此,如果我使用易失性AtomicInteger ,是否意味着我不必再使用任何同步机制? 例如。 class A { private volatile AtomicInteger count; void someMethod(){ // do something if(count.get() < 10) { count.incrementAndGet(); } } 这线程安全吗?

Java volatile数组?

如何使数组变得易变? 因为我已经明白,使数组变得不稳定是不安全的?

应该使用可以certificate“volatile”声明的代码示例

目前我无法理解何时应该使用volatile来声明变量。 我已经做了一些研究并且长时间搜索了一些关于它的材料,并且知道当一个字段被声明为volatile时,编译器和运行时会注意到这个变量是共享的,并且对它的操作不应该与其他内存重新排序操作。 但是,我仍然无法理解在什么情况下我们应该使用它。 我的意思是,有人可以提供任何示例代码,可以certificate使用“volatile”带来的好处或解决问题与不使用它相比?

挥发性背驮式。 这对于visiblity来说足够了吗?

这是关于挥发性的背驮式。 目的:我希望达到轻量级vars visibilty。 a_b_c的一致性并不重要。 我有一堆vars,我不想让它们都变得不稳定。 这段代码是否安全? class A { public int a, b, c; volatile int sync; public void setup() { a = 2; b = 3; c = 4; } public void sync() { sync++; } } final static A aaa = new A(); Thread0: aaa.setup(); end Thread1: for(;;) {aaa.sync(); logic with aaa.a, aaa.b, […]

字段读取和volatile的同步之间的区别

在一篇包含一些并发技巧的文章中 ,一个示例针对以下几行进行了优化: double getBalance() { Account acct = verify(name, password); synchronized(acct) { return acct.balance; } } 如果我理解正确,同步的关键是确保此线程读取的acct.balance的值是最新的,并且对acct.balance中对象的字段的任何挂起写入也写入主存储器。 这个例子让我想一想:将acct.balance(即类Account的字段余额)声明为volatile是不是更有效率? 它应该更有效,除了你对acct.balance访问的所有synchronize ,并不会锁定整个acct对象。 我错过了什么吗?

是在Java中写入易失性的内存屏障

我最近在一次演讲中听到,写入volatile会触发线程写入的每个变量的内存屏障。 这是真的正确吗? 从JLS看来,似乎只有相关变量才会被刷新,而其他变量则不然。 有人知道什么是正确的吗? 能指出我在JLS的具体位置吗?

分析JIT在volatile上下文中生成的x86输出

我正在写这篇文章与深入理解Java中的volatile有关 public class Main { private int x; private volatile int g; public void actor1(){ x = 1; g = 1; } public void actor2(){ put_on_screen_without_sync(g); put_on_screen_without_sync(x); } } 现在,我正在分析JIT为上面的代码生成了什么。 根据我在上一篇文章中的讨论,我们知道输出1, 0是不可能的,因为: 写入volatile v会导致v每个操作都会导致a在v可见之前可见(将被刷新到内存中)。 ……………..(I removed not important body of method)….. 0x00007f42307d9d5e: c7460c01000000 (1) mov dword ptr [rsi+0ch],1h ;*putfield x ; – package.Main::actor1@2 (line 14) […]

使用双锁时使单例实例易变的重点是什么?

private volatile static Singleton uniqueInstance 在单独使用双锁方法进行同步时,为什么单个实例声明为volatile? 我可以在不将其声明为volatile的情况下实现相同的function吗?

Java中“volatile”的含义是什么?

我们在其中一个项目中使用volatile来维护不同线程访问的变量的相同副本。 我的问题是使用volatile和static是否可以。 编译器没有给出任何错误,但我不明白使用两者的原因。

关于可见性及时性的易失性的详细语义

考虑一个volatile int sharedVar 。 我们知道JLS为我们提供了以下保证: 在写入操作happens-before ,在程序顺序中将写入值i到sharedVar happens-before的写入线程的每个动作happens-before ; 通过读取线程r从sharedVar成功读取i happens-before ,由w写入值i ; 读取线程r从sharedVar成功读取i happens-before在程序顺序中r所有后续动作happens-before 。 但是,对于读取线程何时观察到值i ,仍然没有挂钟时间保证。 一个完全不会让读取线程看到该值的实现仍然符合此契约。 我已经考虑了一段时间,我看不到任何漏洞,但我认为必须有。 请指出我的推理漏洞。