操作系统线程的5种状态:
Java线程定义的6种状态:
新建态:当创建一个线程对象时,线程处于新建态,在堆中开辟空间,设置线程名和优先级,优先级不设定则默认为5级,与主线程平级。且在就绪状态后就不能更改 从寄存器拿到栈空间地址和计数器地址
就绪态: 就绪池中存放了多个就绪态线程,从寄存器拿到栈空间地址和计数器地址,分配处理机,进入运行态。
(1) 调用线程的start( )方法,此线程进入就绪态
(2) 当前线程sleep( )方法结束,其他线程join( )结束,等待用户输入完毕,某个线程拿到对象锁,这些线程进入了就绪状态
(3) 当前线程时间片用完,调用当前线程的yield( )方法,当前线程进入就绪态。
(4) 锁池中的对象拿到对象锁后
运行态:线程调度程序从就绪池中选择一个就绪态线程分配处理机,使线程处于运行态,这是线程进入运行态的唯一方式。
阻塞态:重新分配处理机,不会释放资源,将指令计数器的位置和栈的地址给寄存器
(1) 调用sleep()方法
(2) 给方法或者代码块加锁,(Synchronized关键字修饰)
(3) 读取键盘内容,光标等待的时候
(4) 进入等待池
死亡态:线程终止,释放占用的资源
(1) run()或者main()执行完成时,线程终止进入死亡状态
(2) 被另外线程强制死亡
(3) 当终止线程调用start方法,出现java.lang.IllegalThreadStateException异常