一、什么是线程安全性
编写线程安全的代码
核心在于要对状态访问操作进行管理。
共享,可变的状态的访问 - 前者表示多个线程访问, 后者声明周期内发生改变.
线程安全性
核心概念是正确性。某个类的行为与其规范完全一致。
多个线程同时操作共享的变量,造成线程安全性问题。
* 编写线程安全性代码的三种方法:
不在线程之间共享该状态变量
将状态变量修改为不可变的变量
在访问状态变量时使用同步
Java同步机制工具:
synchronized
volatile类型变量
显示锁(Explicit Lock )
原子变量
原子性
不可再分的操作。
例如:读,原子操作,写原子操作.
改变变量的值,非原子操作,因为涉及读,改,写
线程安全需要考虑的因素:
对象状态 - 什么叫有状态和无状态?无状态对象肯定是线性安全的?
复合操作 - 操作有多个步骤完成的操作 (例如, 先检测后执行, 变量的操作都分类三步 : 读取 - 修改 - 写入. )
竞态条件
先检测后执行
延迟初始化竞态条件(单例, 调用方法时才返回对象)
** 待添加实例解释原子性
2.3 加锁机制
遇到问题 - 可以保证每个变量都是线程安全的,但是如果一个方法中同时有多个变量,必须保证变量同步更新才算线程安全。
多个变量时需要加同一个锁,保证多个变量同时更新。
2.4 用锁来保护状态
通常认为只有写入的时候才需要锁,但如果读取的时候值值不能确保是否有其他现在正在修改或者以修改,同样会遇到问题。
2.5 *** 活跃性与性能
活跃性问题?
例如: 线程A等待线程B释放其持有的资源
性能问题?
例如: 线程切换过于频繁,CPU在线程调度上花费资源过多
*** 新的文章中总结锁相关知识与问题
思考
可能出现线程安全的地方?
变量相关
方法操作变量
情况:
多个线程访问一个变量
多个线程访问多个变量
多个线程访问多个方法,同时操作一个变量
多个线程访问多个方法,同时操作多个变量
以上就是我推荐给Java开发者们的一面试经典知识。但是这些知识里面并没有太多Java全栈、Java晋阶、JAVA架构之类的题,不是我不推荐,而是希望大家更多的从基本功做起,打好基础,太多复杂的内容一会儿也说不明白。
好了同学们,我能介绍的也都全部介绍完给你们了,如果下获得更多JAVA教学资源,可以选择来我们这里共同交流,群:240448376,很多大神在这里切磋学习,不懂可以直接问,晚上还有大牛免费直播教学。
注:加群要求
1、具有一定工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加,有些应届生和实习生也可以加。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。
3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。
4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。
5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!
PS:现在主要讲解的内容是(反射原理、枚举原理与应用、注解原理、常用设计模式、正规表达式高级应用、JAVA操作Office原理详解、JAVA图像处理技术,等多个知识点的详解和实战)
6.小号或者小白之类加群一律不给过,谢谢。
最后,每一位读到这里的网友,感谢你们能耐心地看完。觉得对你有帮助可以给个喜欢!希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步