1 线程和进程
- 一个程序会产生一个进程
- 一个进程中,可以有若干个线程
- 线程的执行,是在CPU当中进行高速的资源切换
- 线程的执行,等待的时间,通常和cpu的运行性能和cpu的内核数有闭关关系
2 主线程
在java当中,main方法被称为主线程
3 子线程
每创建一个线程,就会产生一个新的调用栈
4 用户线程
在执行过程中,虚拟机是不关闭的
5 守护线程
当某个程序的用户线程全部执行完毕后,守护线程立刻停止
6 调用start
- 调用start方法,是线程开始执行,一定一定不是调用run方法,那个就是一个普通的方法调用
- start方法启动了线程后,线程进入到预备执行状态,等待cpu分配资源,只有资源分配到了,才开始执行
- 线程执行的(瞬时状态)顺序是不可控的
- 只要是线程进入阻塞,那么一定是回到可执行状态
- 线程和线程之间是相互独立的,有各自的数据区
7 线程调度
7.1 等待和唤醒
- 等待或唤醒必须在同步状态下,给某个方法加同步锁,保证该方法,同一时刻只有一个线程可以调用该方法
- 等待可以被唤醒,也可以到等待时间等待结束
- 等待生命周期:获得锁,然后等待,释放资源(意味着释放锁):被唤醒/时间到,等待获取锁,到可执行状态,等待cpu分配资源
- 只有一个对象,可以等待后被唤醒
7.2 休眠
- 不可被唤醒,只能自己醒
- 休眠,阻塞,时间到,可执行状态,执行
7.3 让步
- 优先级:1-10,1最低,10,最高,看概率
- 让步,可执行状态,执行
- 让步后,有可能会再次被选中
7.4 合并
- 线程原本是并行的,合并后,线程变成串行;合并的线程,可以在指定的时间后自动开始执行,但是这个和休眠是一样的
- 声明周期等同休眠
7.5 守护线程
- 只要是用户线程执行完毕,守护线程立刻结束
- 守护线程自己结束