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

本秂侑毒 提交于 2020-02-05 05:17:35

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

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

2.线程安全

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

3.线程不安全的原因

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

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

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

3.2.可见性(visible)

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!