线程安全

线程

线程状态转移图
在这里插入图片描述

  1. 什么是线程安全?
    程序运行的结果完全符合预期,不会出现有时正确,有时错误。即(消除随机性并且正确)

  2. 线程不安全的原因是什么?

    1. Java中的语句,对应不一定是一条字节码文件,更不一定是一条CPU指令
    2. 线程调度中有随机性存在。什么时候从 CPU上被调度下来 以及什么时候被调度回CPU上
  3. 什么情况会出现线程不安全?
    1. 线程之间有共享的数据。即线程之间不存在共享,天生是线程安全的。
    2. 即使线程之间有共享,但没有线程修改共享数据,则天生是线程安全的。

  4. JVM的运行时内存区域中,哪些位置是共享的?那些是线程内部私有的?
    1. nextPC值—PC区域 私有
    2. 栈区(Java栈/native栈) 私有
    3. 堆区 共享
    4. 方法去 共享
    5. 运行时常量池 共享

在这里插入图片描述

在这里插入图片描述

  1. 局部变量是线程私有的数据,不会共享,不需要特别考虑线程安全问题。
  2. 属性/对象+静态属性/类,是共享的,需要考虑线程安全问题。

基本数据类型和引用数据类型的区别

  1. 一旦运行起来,所有的变量,本质上在JVM看来就是一块内存
    1. 基本数据类型的值的使用,是直接过程
    2. 引用数据类型的值的使用,是间接过程

带来线程不安全的三个重要知识点
1. 原子性–(认为原子不可以再分割)
一组需要保证不能再分割的操作,就称位保证原子性
在这里插入图片描述
2.代码可见性
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3. 代码重排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值