关于Java共享变量的思考
来源:互联网 发布:不知为不知的知的意思 编辑:程序博客网 时间:2024/05/16 15:45
我们要研究一个问题,一定要问明白这个问题的本质是什么?为什么会是这样,这样可能会对以后的开发工作有很大的帮助,这个知识点,献给正在找工作的伙伴们,算是一个简单的理解,有不对之处经量提出来;
1,什么是共享变量?
2.如何解决共享变零的问题?用什么方法解决?每一个方法之间又有那些异同和相同呢?
首先在回答共享变量之前,我们应该搞清的是什么是线程安全?
对于线程的安全,通过博客我们可能会得到很多的答案,但在这里我结合一点自己的想法和感受谈谈线程安全
我想本质的问题就是:启动线程的方法是start方法,但是真正运行线程的方法是run方法,所以线程安全不安全取决于run方法中的代码的执行的结果是否一致,如果start启动的的是多个线程,而run中运行的是多个线程,如果当单个线程运行的结果和多个线程运行的结果不一样时,那么线程必定是不安全的,反之,如果这多个线程运行的结果和单个线程运行的结果是一致的,那么必然是线程安全的,也就是说,run'中的代码运行的结果是一致的,所以这个问题就解决了;下面我们回答共享变量的问题;
假如有三个线程:线程一,线程二,线程三,三个线程同时启动区访问一个共享变量x,从java虚拟机的角度来说,共享变量存在主内存中.但是变量的修改不能再主内存中修改,因此每一个变量对应的每一个线程都有一个工作内存区域,而这个区域就是每一个变量的修改的区域,也就是说:变量的修改是在工作内存中修改的,而非是在主内存中修改的,为了保证共享变量的可见性,加一个互斥锁,这个目的是保证某一段时间只能由一个线程修改变量,但是下一个线程读取变量的值,一定是在主内存中读取的,其实说白了就是一下三点:
1.主内存-------->修改后的变量,用于读取
2.工作内存------>共享变量真正修改的地方
3.互斥锁---------->保证共享变量的安全性;
volidate:
强迫修改后的值,保存在主内存中;
原子性:
sybchonized':具有可见性和原子性,volidate不具有原子性;
- 关于Java共享变量的思考
- 关于java基本类型变量的思考
- 关于final 变量的思考
- 关于const变量的思考
- 关于python java C++ 变量机制的思考
- java并发编程(对于线程内共享变量安全的思考)
- [JAVA] 一条新闻引出的思考,关于不用中间变量交换两个变量的值
- 关于全局与静态变量的思考
- 关于linux条件变量的一点思考
- #1关于函数参数变量的思考
- 关于变量的类型与变量初始化的一点思考
- 关于全局变量、局部变量、静态变量的思考
- 关于java静态方法里只能调用静态变量的思考
- 中庸之道:关于java的思考
- Java 关于对象的思考
- 深度思考Java成员变量的初始化
- 深度思考Java成员变量的初始化
- 深度思考Java成员变量的初始化
- java高级工程师的技术进阶
- java 静态方法和实例方法的区别
- CODEVS 1390 回文平方数 青铜题 实在很伤
- CSS布局之脱离文档流详解——浮动、绝对定位脱离文档流的区别
- 171213 逆向-.Net基础概念
- 关于Java共享变量的思考
- spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理
- android 精彩博文归类总结
- 控制位数和填充0
- mybatis在oracle数据库中获取主键
- sed---用法简介
- 键盘操作练习
- 机器学习(10)隐马尔可夫模型
- svn地址迁移,项目检出,检出后乱码