Java之volatile关键字
2022/2/2 17:42:28
本文主要是介绍Java之volatile关键字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
作用:
volatile关键是主要是定义在属性上,表示此属性直接为数据操作,不做副本拷贝的处理。
正常的变量处理步骤:
- 获取变量原有的数据内容副本;
- 利用副本为变量进行数学计算;
- 将计算后的变量,保存到原始空间之中。
而如果一个属性上追加了volatile关键字表示:
不适用副本,直接操作原始变量
节约了拷贝副本、重新保存的步骤
在属性上加了volatile表示在数据上直接进行操作,不做副本的操作
但是这并不能解决同步的问题,所以当遇到同步的问题的时候还是得用同步相关的解决方法。
volatile加同步代码测试:
package Demo_2_2_volatile关键字; public class MyThread implements Runnable { private volatile int ticket = 5; @Override public void run() { synchronized (this) { while (this.ticket > 0) { try { Thread.sleep(10); // 睡眠 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "买票,ticket剩余: " + --this.ticket); } } } }
package Demo_2_2_volatile关键字; public class Main { public static void main(String[] args) { MyThread mt = new MyThread(); new Thread(mt,"黄牛1").start(); new Thread(mt,"黄牛2").start(); new Thread(mt,"黄牛3").start(); } }
输出结果:
面试题:
请解释volatile 与 synchronized的区别?。
- volatile主要在属性上使用,而synchronized是在代码块与方法上使用的;
- volatile无法描述同步的处理,它只是一种直接内存的处理,避免了副本的操作,而synchronized是实现同步的操作。
这篇关于Java之volatile关键字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行