Java线程的状态、wait和sleep区别
Thread.State
线程状态,线程可以处于以下状态之一:
- NEW:尚未启动的线程处于此状态
- RUNNABLE:再Java虚拟机中执行的线程处于此状态
- BLOCKER:被阻塞等待监视器锁定的线程处于此状态
- WAITING:正在等待另一个线程执行特定动作的线程处于此状态
- TIMED_WAITING:正在等待另一个线程执行特定动作到达指定时间的线程处于此状态
- TERMINATED:已退出的线程处于此状态
一个线程可以再给定时间点处于一个状态,这些状态是不反应任何操作系统线程状态的虚拟机状态。
线程中断或者结束,一旦进入TERMINATED
终止状态,就不能再次启动
wait和sleep区别
来自不同的类
wait–>Object
sleep–>Thread
关于锁的释放
wait会释放锁
sleep不会释放锁,抱着锁睡觉
适用范围不同
wait必须在同步代码块或同步方法里
sleep可以在任何地方使用
是否需要捕获异常
wait不需要捕获异常
sleep需要捕获异常,因为肯能发生超时等待的问题