多线程基础线程状态
什么是多线程
进程是在计算机系统中独立运行的程序,线程是在进程中独立运行的任务.在多任务操作系统中,为了最大化利用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(进程号(不是线程号)) 获取进程的 线程堆栈信息.
在线上应用出问题的时候经常会查看线程状态.统计线程的状态.进而排查原因.