线程状态
Posted aaroncnblogs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程状态相关的知识,希望对你有一定的参考价值。
NEW:
线程刚刚创建。
Thread t = new Thread();
RUNNABLE:
已进入临界区(获得锁),正在执行或等待CPU/IO等资源。
t.start();
BLOCKED:
未进入临界区,等待锁。
final Object lock = new Object();
Runnable run = new Runnable() {
public void run() {
synchronized (lock) {
…
}
}
}
Thread t1 = new Thread(run);
t1.setName( “t1”);
Thread t2 = new Thread(run);
t2.setName( “t2”);
t1.start();
t2.start();
WAITING:
已进入临界区(获得锁),调用了wait,需要其他线程调用notify / notifyAll唤醒;或join了另外线程等待其结束。
final Object lock = new Object();
Thread t1 = new Thread(){
public void run() {
synchronized (lock) {
lock.wait(); // 消费者
}
}
}.start();
Thread t2 = new Thread(){
public void run() {
synchronized (lock) {
lock.notifyAll(); // 生产者
}
}
}.start();
TIMED_WAITING:
有时间限制的WAITING,在调用wait(long), join(long)等情况下,或sleep。
synchronized (lock) {
lock.wait(60 * 1000L);
}
或
synchronized (lock) {
sleep(30*1000L);
}
TERMINATED:
run方法已执行完毕。
通过jstack查看线程状态;
标题为threadName priority tid nid desc;
跟踪 tid, nid 都可以唯一找到线程;
如果BLOCK说明synchronized块中处理速度比较慢;
如果WAITING说明性能瓶颈存在于触发notify的那段逻辑。
以上是关于线程状态的主要内容,如果未能解决你的问题,请参考以下文章