多线程(2)

多线程的状态转移图
在这里插入图片描述
线程的七种状态:NEW,RUNNABLE,RUNNING,WAITING,TIMED_WAITING,TERMINATED,BLOCKED
线程安全
线程不安全:线程没有按照预期正常工作。
线程不安全的原因:共享资源/数据/变量
①私有数据不需要考虑线程安全问题,共享数据才是线程不安全的罪魁祸首
②线程之间会因为调度的原因,穿插着进行,数据的方法有一定的特殊规则(调度交叉执行)
③代码的原子性/内存的可读性/代码的重排序
a.原子性(atomic):一段代码运行期间是不能被分割的,一句java代码不一定就是原子的 原子性中不可再分的代码片段——临界区 保证线程安全:1)指令本身 2)加锁
b.内存的可见性:程序运行过程中Java只保证了单线程情况下工作内存中的数据是正确的,如果要保证多线程情况下,可以看到线程的工作情况(内存的变化就需要保证变量的可见性问题
c.①为什么要进行重排序:CPU/Javac编译器/运行时JIT对代码进行适当的优化 ②java规定了优化必须保证单线程情况下的正确性
如何保证线程安全:1.如果可以设计出不需要共享的数据,天生安全2.如果非要进行数据的共享,尽可能的保证数据的只读性——不可变对象3.利用各种机制保证原子性/可见性/重排序问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值