Java中线程的状态
- 创建一个线程对象之后,线程就是 new 新建状态
- 使用 start() 方法之后线程进入 runnable 可运行状态(ready | run)
- 执行完 run() 方法之后线程进入 terminnated 终止状态
runnable 状态可能出现的其他状态
- 多个线程竞争同一个锁,没有获得锁的线程进入到 blocked 阻塞状态
- 调用了有参数的 join() wait() sleep() 方法之后,线程进入计时等待状态,并且在等待时间到达之后,会自动唤醒线程。
- 调用了无参的 wait()、join()方法之后,线程进入等待状态,并且不会自动唤醒,需要其他线程使用 notify() 或者 notifyAll() 来唤醒。
注意的点
●调用 sleep() 方法的线程不会释放锁 但是调用了 wait() 方法的线程是会释放锁。
●join()与 wait()、sleep()有所不同,比如 t1.wait()、t1.sleep() 是对 t1 线程进行休眠操作,而 t1.join() 是哪个线程执行了 t1.join() 这行代码那么这个线程进入休眠操作。