您的位置:首页 > 其它

多线程基础线程状态

2018-04-01 20:28 232 查看
多线程基础线程状态

什么是多线程

进程是在计算机系统中独立运行的程序,线程是在进程中独立运行的任务.在多任务操作系统中,为了最大化利用CPU,使用了多线程的方式。在某个时间段,多个线程进行不同的任务,每个线程去CPU申请时间片, 每个线程交替占用时间片,每个线程都是断断续续的执行,对外看来是一直在运行。多线程可以让CPU在多个任务之间进行切换,从而使用时较短的任务及早完成,而不必等待耗时的任务。多线程提高了CPU利用率。

多线程有哪些状态

线程的状态有6种,通过Thread类的源码可以看到。

public enum State {

NEW,//新建未启动

RUNNABLE,//正在运行

BLOCKED,//阻塞,线程正在等待获取监视器锁进入同步块

WAITING,//等待,调用(Object.wait(),join(),LockSupport.park)

TIMED_WAITING,//带有时间的等待

TERMINATED ,;//任务结束

}

线程的状态切换



实践:

package com.chart2;

/**
* 线程状态
*/
public class ThreadState{
private static class StateWork implements Runnable{
public StateWork() {
System.out.println("create Thread ,Thread State is "+Thread.currentThread().getState());
}

public void run() {

System.out.println("working,Thread State is "+Thread.currentThread().getState());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) throws InterruptedException {
StateWork stateWork = new StateWork();
Thread workThread = new Thread(stateWork);
System.out.println("before start.."+workThread.getState());
workThread.start();
Thread.sleep(1000);
System.out.println("after start .."+workThread.getState());
Thread.sleep(1000);
System.out.println(workThread.getState());
/**
create Thread ,Thread State is RUNNABLE
before start..NEW
working,Thread State is RUNNABLE
after start ..TIMED_WAITING
TERMINATED
*/
}
}


如何查看线程的状态

在线上排查问题的时候往往需要查看线程的状态.此时需要用命令

用 jstack pid(进程号(不是线程号)) 获取进程的 线程堆栈信息.

在线上应用出问题的时候经常会查看线程状态.统计线程的状态.进而排查原因.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息