Java Volatile 原理,使用

当一个变量被Volatile修饰后,它就拥有了两种特性

1、线程可见性,当一个线程修改了这个被Volatile修饰的变量,那么这个变量的变动其他的线程都能读的到

2、禁止指令重排序优化。


但是必须要明白,Volatile不能在并发的情况下仍然会出现并发问题,如果两个线程同时访问这个资源,而这两个线程处理的时间是比较久的。那么这个时候就出现了并发访问的问题。所以Volatile是不能替代锁的。


明白了上面的情况,那么Volatile是不是就没有使用价值了呢?然而并非如此,当只有一个线程写入权限,其他线程都只有读权限的时候,使用就可以代替传统的synchronized关键字提升并发访问的效率。但是如果有多个线程写的时候,仍然需要传统的锁进行多线程并发数据保护。






猜你喜欢

转载自blog.csdn.net/zsf5201314z/article/details/77444905