多线程2--多线程带来的风险---线程安全

1.与线程相关的栈的问题

(1)栈是用来调用方法的,局部变量在栈区,每个线程有自己的栈区,局部变量在线程之间是不能共享的。
(2)堆、常量池、方法区中的数据在线程之间是共享的。
(3)有共享数据,线程安全才能出现问题。

2.线程安全

(1)定义:如果多线程环境下代码运行的结果符合单线程环境运行的结果,则说这个程序是线程安全的。

3.线程不安全的原因

(1)线程之间交错运行;
(2) 没存区域的数据不一致;

3.1.原子性(atomic)–在一段代码执行完成之前不能被中断

(1)原子性锁表现出的现象:同步互斥,表示操作是相互排斥的;
(2)一条java语句不一定是原子的,也不一定只是一条指令;
(3)常见的原子性表现形式:
在这里插入图片描述
(4)不保证原子性带给多线程的问题:
如果一个线程正在对一个变量操作,中途其他线程插入进来了,如果这个操作被打断,结果就可能是错误的。

3.2.可见性(visible)

(1)主内存-工作内存
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值