线程安全(精简)
2023-03-20 14:49:00 时间
线程安全问题
线程安全问题本质上就是内存安全问题。
每个进程中都会有一块特殊的区域(堆内存),进程中所有线程都可以访问该区域,这是线程安全问题的原因之一。
线程安全指的是,在堆内存中的数据由于可以被所有线程访问到,在没有限制措施的条件下存在被意外修改的风险。
解决方式
1、操作系统会给每个线程分配私有空间(栈内存),栈内存中的数据只能被线程本身访问,其他线程无权访问,因此可以将可能会发生线程安全的数据放到栈内存中,常见的是在程序中定义为局部变量。
优点:安全
缺点:局部变量访问权限变小
2、将数据放在公共区域(堆内存)中,当每个线程使用时都拷贝一份数据在自己的栈内存中,只操作自己栈内存中的数据。也就是使用ThreadLocal类。
优点:安全
缺点:*
3、将公共区域的数据使用final关键字修饰,这样线程只能读取,不能修改。
优点:安全
缺点:只能读,不能改
4、将数据放在堆内存中,每个线程在获取到数据的使用权时,对该数据加互斥锁,其他线程看见数据被锁住只能选择等待,当线程使用完毕数据后,释放锁,其他线程才能继续抢夺数据的使用权(悲观锁)。
优点:安全
缺点:获取锁释放锁需要消耗资源
5、CAS(Compare And Swap):假设程序并发量很小,造成线程安全的问题的概率也很小,可以使用CAS方式,规定一个版本号,如果A线程操作数据未操作完毕就去做其他工作(此时版本号为2),回来后版本号如果改变就重新从头开始操作,否则就继续完成剩下的工作。(乐观锁)
优点:省去了释放锁获取锁的资源消耗
缺点:不适用于并发量大的程序。
相关文章
- 如何借助GlusterFS构建存储池
- 如何看待数据中心网络架构变化?
- Docker生态会重蹈Hadoop的覆辙吗?
- 链家网赵国贤:如何应对业务增长带来的架构搭建难题
- AlphaGo的大数据等技术分析
- 企业大数据分析实践指南
- Teradata姜欣:洞察数据分析生态系统的未来
- 这5种必知的大数据处理框架技术,你的项目应该使用哪种?
- 能源行业将被重构,大数据有哪些“挖”法?
- 大数据:敢问路在何方?
- 一小时掌握大数据思维的秘诀丨周涛精彩直播手记
- 使用Apache Spark构建实时分析Dashboard
- 2017年大数据发展十大新趋势
- 从机器学习到学习的机器,数据分析算法也需要好管家
- 数字化转型战略所需的六大企业物联网平台
- 机器学习最常用优化之一——梯度下降优化算法综述
- 掌握10到30种技术,只为创建一个大数据解决方案
- 为什么您企业新建的数据中心不奏效——状态调试不对
- 这5种必知的大数据处理框架技术,你的项目应该使用哪种?
- 机智云黄灼:雾计算推动的下一代物联网计算