码迷,mamicode.com
首页 > 编程语言 > 详细

线程状态

时间:2018-04-19 20:26:57      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:存在   情况下   速度   标题   col   线程状态   span   临界区   ali   

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的那段逻辑

线程状态

标签:存在   情况下   速度   标题   col   线程状态   span   临界区   ali   

原文地址:https://www.cnblogs.com/aaroncnblogs/p/8885900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!