建立new,就绪runnable,运行running, 阻塞blocked,等待time waiting,时间等待waiting,消亡dead线程
建立:用户建立一个线程对象
就绪:建立完线程不会当即进入就绪状态,须要为线程分配内存空间,等到知足全部就绪条件后,才会进入就绪状态。继承
运行:进入就绪状态后,须要等待获取CPU执行时间,获得CPU执行时间后,才会进入运行状态。内存
阻塞:运行过程当中,同步块被阻塞的话会进入阻塞状态同步
时间等待:运行过程当中,用户主动让线程睡眠的话,进入时间等待it
等待:运行过程当中,用户让线程等待的话,进入等待object
消亡:线程执行完毕或者忽然中断,就会被消亡yield
对于单核CPU来讲,CPU在一个时刻只能运行一个线程,在 运行一个线程的过程当中,转去运行另外一个线程,就叫上下文切换。程序
上下文切换时,线程须要保存线程的运行状态,以便下次切换回来的时候继续切换以前的状态运行。方法
在冯诺伊曼结构的计算机中,是由CPU的控制器执行指令,每执行一条指令,程序计数器记录指令运行到哪,因此须要保存程序计数器和CPU寄存器的状态。
上下文切换就是存储和恢复CPU状态的过程,它使得线程执行可以从中断点恢复执行。
开启一个线程
启动线程后,线程得到了CPU执行时间,就会执行run中的代码。
继承Thread类,须要重写run方法。
让线程睡眠,线程进入时间等待的状态。
交出CPU,CPU去执行其余任务。 若是当前线程持有对象锁,不会释放锁,至关于线程阻塞。
调用yield方法会让当前线程交出CPU,不会交出锁。
和sleep区别:
1.不能控制具体交出CPU的时间。yield会让线程进入就绪状态,只要得到CPU就能执行。sleep在等待时间内是阻塞的。 2.yield只能让同等或更高优先度的线程得到CPU,sleep没有限制。
主线程中,调用无参join,会让主线程等待直到线程任务执行完毕。 调用有参join,就会等待一段时间。
本质是object.wait方法,会交出CPU, 释放锁
阻塞线程调用interrupt的话,会抛出异常来中断阻塞线程。
本质是把中断标志设为true。调用isInterrupted()就可以判断中断标记的状态。
废弃方法。