多线程基础线程状态

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值