join的知识补充,线程的状态和线程安全
- 一.多线程完成运算操作
- 二.多线程代码的变换
- 2.1 转换成串行执行
- 三.join的参数
- 四.获取线程的引用
- 4.1用this方法获取实例
- 4.2 用currentThread获取实例
- 五.线程的状态
- 六.线程安全
一.多线程完成运算操作
可以发现,多线程并行比单线程的速度快1倍左右,所以多线程的效率还是远远高于单线程
二.多线程代码的变换
2.1 转换成串行执行
三.join的参数
(1) 第一个参数:死等,可能会导致程序卡住,无法处理后续逻辑
(2) 有上限时间的等待,上限时间到了之后,就不再等
(3) 设置一个ns级别的等待。
四.获取线程的引用
4.1用this方法获取实例
4.2 用currentThread获取实例
五.线程的状态
1.NEW 创建Thread对象
2.Runnable 就绪状态,随时到CPU执行或者正在CPU上执行
3.Terminated Thread对象还存在,但是线程内部执行完毕
4.Timed_waiting 指定时间的阻塞,到达一定时间后解除阻塞
5.waiting 不带时间的阻塞,满足一定条件解除阻塞,join和wait会进入这种状态。
6.Blocked 带有锁竞争
六.线程安全
两个线程进行的时候为什么count最终是63755呢?
我们会有三步
1.load 将内存中的数据读取到寄存器上
2.add 将寄存器内部的值+1
3.save 将寄存器上的值放回到内存中
下面是几种状态
结论可以得到