线程的几种状态:
-
New 新建状态:线程刚被创建,start方法之前的状态。
-
Ready 就绪状态:未得到时间片就绪状态,start方法后线程进入就绪队列,等待被选中执行
-
Runnable 运行状态: 得到时间片运行中状态
-
Blocked 阻塞状态: 如果遇到锁,线程就会变为阻塞状态等待另一个线程释放锁
-
Waiting 等待状态: 无限期等待
-
Time Waiting 超时等待状态:有明确结束时间的等待状态
-
Terminated 终止状态: 当线程结束完成之后就会变成此状态
操作系统OS有许多线程任务,OS选择任务分配给cpu执行。
cpu的核心,在某个时间单位内只能执行一个任务,计算机有几个核心,就能同时执行几个任务。
start 并不是执行线程的意思,而是将线程提交到就绪队列。
就绪队列:
先提交到就绪队列中不一定就可以先执行,线程的执行顺序,是由OS 决定调度的;
先执行的线程也未必能先执行完毕,因为这里涉及到一个上下文切换的问题;
执行a线程任务,一个时间片后切换到线程任务b,同时保存a的状态,这一过程叫上下文切换;
比如 a 任务执行完需要1s,当a开始执行后,到达一个时间片的大小(一般是几十毫秒)就要进行切换,让出cpu核心给别的线程,任务a 回到就绪队列进行等待。