#线程的6种状态
- NEW # 刚创建的线程
- RUNNABLE # 正在运行的线程
- BLOCKED # 线程处于阻塞状态,等待监视锁,可以重新进行同步代码块中执行
- WAITING #等待状态
- TIMED_WAITING #调用sleep() join() wait()方法可能导致线程处于等待状态
- TERMINATED #线程执行完毕,已经退出
wait / sleep 的区别
1.来源不同
sleep来自Thread类,wait是来自Object类。
sleep是谁调用谁睡觉
2.资源
sleep是抱着资源睡觉,也就是sleep不释放锁,但是sleep可以设置时间,等到时间到了之后sleep会继续执行。
wait是释放资源睡觉,也就是释放锁,但是它只能被别的线程唤醒,而且唤醒后它就去就绪队列等待系统分配资源
3.作用域
sleep可以在任何地方使用
wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用
4. 异常
sleep必须捕获异常
wait,notify和notifyAll不需要捕获异常