java中的基础知识是很多的,而且内容也是十分的详细的。今天就来为大家介绍一下java多线程同步的有关内容,一起来了解一下吧。
Volatile详解
a.volatile关键字为域变量的访问提供了一种免锁机制
b.使用volatile修饰域相当于告诉虚拟机该域可能会被其他线程更新
c.因此每次使用该域就要重新计算,而不是使用寄存器中的值
d.volatile不会提供任何原子操作,它也不能用来修饰final类型的变量
代码如下所示:
public class Bank { private volatile int count = 0; // 账户余额 // 存钱 public void addMoney(int money) { count += money; System.out.println(System.currentTimeMillis() + "存进:" + money); } // 取钱 public void subMoney(int money) { if (count - money < 0) { System.out.println("余额不足"); return; } count -= money; System.out.println(System.currentTimeMillis() + "取出:" + money); } // 查询 public void lookMoney() { System.out.println("账户余额:" + count); } }
运行结果如下图:
因为volatile不能保证原子操作导致的,因此volatile不能代替synchronized。此外volatile会组织编译器对代码优化。它的原理是每次要线程要访问volatile修饰的变量时都是从内存中读取,而不是存缓存当中读取,因此每个线程访问到的变量值都是一样的。这样就保证了同步。
以上就是关于java多线程同步,Volatile详解的主要内容了。具体的知识还是很好理解的。如果你对java知识感兴趣,想要了解更多java基础知识,敬请关注奇Q工具网。
推荐阅读: