单说状态直接看 API 就好了 https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html
NEW : 线程创建之后,但是还没有启动。
RUNNABLE : 正在 Java 虚拟机下跑任务的线程的状态。
BLOCKED: 阻塞状态,等待锁的释放,比如线程A进入了一个 synchronized 方法,线程B也想进入这个方法,但是这个方法的锁已经被线程A获取了,这个时候线程B就处于 BLOCKED 状态
WAITING: 等待状态,处于等待状态的线程是由于执行了 3 个方法中的任意方法。
1. Object的wait方法,并且没有使用timeout参数;
2. Thread的join方法,没有使用timeout参数
3. LockSupport的park方法。
处于 waiting 状态的线程会等待另外一个线程处理特殊的行为。 再举个例子,如果一个线程调用了一个对象的wait方法,那么这个线程就会处于waiting状态直到另外一个线程调用这个对象的notify或者notifyAll方法后才会解除这个状态。
TIMED_WAITING: 有等待时间的等待状态,比如调用了以下几个方法中的任意方法,并且指定了等待时间,线程就会处于这个状态。
1. Thread.sleep方法
2. Object的wait方法,带有时间
3. Thread.join方法,带有时间
4. LockSupport的 parkNanos 方法,带有时间
5. LockSupport的 parkUntil 方法,带有时间
TERMINATED: 线程中止的状态,这个线程已经完整地执行了它的任务
我不是专家,但我是知识的搬运工:https://blog.csdn.net/pange1991/article/details/53860651/
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。