Java并发编程之线程状态总结
线程状态
- 新创建(NEW):新创建了一个线程对象,但还没有调用start()方法,如new Thread(r)。
- 可运行(RUNNABLE):调用start方法,线程处于runnable状态。
- 阻塞(BLOCKED):表示线程在等待锁被释放出来。
- 等待(WAITING):线程等待另一个线程通知调度器一个条件。
- 超时等待(TIMED_WAITING):线程进入计时等待。
- 终止(TERMINATED):表示该线程已经执行完毕。
线程状态图解
线程状态Tips
- Thread.sleep(long millis),一定是当前线程调用此方法,当前线程进入TIMED_WAITING状态,但不释放对象锁。
- Thread.yield(),一定是当前线程调用此方法,当前线程放弃获取的CPU时间片,但不释放锁资源,由运行状态变为就绪状态.
- thread.join()/thread.join(long millis),当前线程里调用其它线程t的join方法,当前线程进入WAITING/TIMED_WAITING状态,当前线程不会释放已经持有的对象锁。
- obj.wait(),当前线程调用对象的wait()方法,当前线程释放对象锁,进入等待队列。依靠notify()/notifyAll()唤醒或者wait(long timeout) timeout时间到自动唤醒。