线程的生命周期和触发的机制

在JAVA层面,线程有6个状态:
1、NEW(初始状态):高级语言层面的线程创建,操作系统并没有真正创建线程,因此也不会获得CPU的执行权,通过调用start()方法进入RUNNABLE状态;
2、RUNNABLE(可运行/运行状态):RUNNABLE状态分可运行和运行两种状态,在java语言中统一叫做RUNNABLE状态,NEW状态的线程通过调用start()方法进入可运行状态,此时操作系统会新建一个线程,当有CPU空闲时,OS会分配CPU执行权,此时进入运行状态。运行时状态也可通过调用yield()方法再次进入可运行状态;
3、BLOCKED(阻塞状态):RUNNABLE状态的线程如果遇到同步锁等待的情况,会进入BLOCKED状态,此时会让出CPU执行权。若同步锁释放,当前线程重新获取CPU执行权并获取锁,此时会从BLOCKED状态重新进入RUNNABLE状态;
4、WAITING(无限时等待):RUNNABLE状态的线程内部调用wait()、sleep()、join()、LockSupport.part()等方法时,会从RUNNABLE状态进入WAITING状态,并出让CPU使用权,此时线程可以通过调用notify()、notifyAll()、LockSupport.unpart()方法进次入RUNNABLE状态;
5、TIMED_WAITING(有限时等待):RUNNABLE状态的线程内部调用wait(long)、sleep(long)、join(long)、LockSupport.partUnit(xx)方法时,会从RUNNABLE状态进入TIMED_WAITING状态,并出让CPU使用权,此时线程可以通过调用notify()、notifyAll()、LockSupport.unpart()方法进次入RUNNABLE状态;
6、TERMINATED(终止):线程运行结束,进入终止状态。也可以通过调用stop()或interrupt()方法进入终止状态,不过stop()方法会直接杀死线程,当前线程持有的锁也不会释放,该方法时不可取的,interrupt()方法仅是通知线程可以终止,具体是否要终止有线程内部自己决定。interrupt()方法会更新线程标识位,并且抛出InterruptedException,线程内部可以通过主动检查线程标志位或捕获InterruptException的方式来获取线程终止的通知。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值