案例 情况1
案例 情况2
案例 情况3
线程的执行流程
实现线程的两种方式,以及利弊
举例子比较:。。。。。。。。。。。
线程的五种状态
新建 就绪 运行 {阻塞(->就绪)} 死亡
出现阻塞 sleep与wait的区别
四种就绪状态的例子
- 开启线程
- 解除阻塞的状态
- yieLd 礼让线程
Jvm的内存管理
四种阻塞的例子
- sleep 休眠 (只会让出CPU,不会导致锁行为的改变 加锁)
- Wait等待 (不仅让出CPU,还释放已经占有的同步资源锁 不加锁)
- Jion 插队
- Read wlite
线程里面的方法
Sleep与yiwId 一样都是暂停线程
Sleep 运行状态---》阻塞状态 时间到了阻塞状态——》就绪状态 等待CPU的调度
yiwID 运行状态——》就绪状态 高风亮节礼让线程,让出CPU的调度,避免当前线程占用CPU过久,让其他线程重新竞争CPU的调度权(执行权),
Join是一个成员方法,需要对象的调用,sleep 以及yieId是静态方法,可以直接的调用
currentThread().getName(); 获取当前现成的名称
Theard 多线程的构造函数(重要的一节)
................
Priority 线程的优先级
new thread().getpriority(); 这是默认的优先级
Daemon 守护线程
守护线程;
详解:
在Java中有两种线程:一种是普通线程,另一种是守护线程
守护线程:顾名思义就是守护的线程,它是为非守护线程服务的线程。
JVM虚拟机正常退出的时机就是系统中不存在非守护线程的时候,也就是说系统中不存在普通线程时虚拟机退出而不管守护线程是否还在运行
生活场景举例:普通线程相当于是主人,守护线程就是保姆,保姆是为了主人服务的。当主人都挂了,那么保姆可以存在也可以不存在
有个同事问我的一个面试题:一个主线程,三个子线程,9个守护线程,他们停止的顺序时什么?
答:我们理解了上面讲的虚拟机退出时机再结合生活场景的例子,很容易就能搞明白这个问题!主线程相当于家庭、子线程相当于主人、守护线程相当于保姆或者是奴才,那么当我们的主人挂了,保姆可能还要继续打扫房子,但是房子也坏了消失了,那么保姆或奴才也就没必要存在了。所以说守护线程是最后才会停止的。那么主线程和子线程是谁先停止呢?这个其实很简单,我们想想,在一个main方法中启动一个线程打印一条语句,那么只有当这个线程停止之后,控制台的那个红色框才会置灰,也就是说main线程才会死亡。那么这个问题的答案就是:子、主、守护。
1.代码例子:Thread.setDaemon(true)设置为守护线程。
2.
=============================================================================================
并发
并发三要素
线程的同步
考虑两个方面:性能与安全
同步有两种方式:(synchronized)同步方法 同步块
需要你自己理解到位:
什么时候锁上了?什么时候没有锁上?
为什么 要锁他?
线程不安全是哪里造成的?
原因是什么??
指定锁的对象,使用同步代码块。。
代码块分为四种
普通块
局部快
静态块 类
构造块 对象
同步块 方法里面 解决方法的安全
以后就是我的最后总结语