java线程的几种状态

本文详细介绍了Java中Thread对象的五种状态(NEW,TERMINATED,Runnable,TIMED_WAITING,WAITING,BLOCKED),并通过代码示例展示了状态转换过程,以及synchronized对线程状态的影响。后续将深入讨论等待状态的进一步分析。
摘要由CSDN通过智能技术生成

一、java的几种状态

1.NEW

        Thread对象创建好了,但还没有执行start()方法。

2.TERMINATEN

        Thread对象存在,但是内部线程已经执行完毕。

3.Runnable

          就绪状态,(表示,正在在CPU上执行,或者准备就绪随时可以去CPU上执行)

4.TIMD_WAITING

         指定时间阻塞

5.WAITING

        死等

6.BLOCKED

     由于锁竞争,引起的阻塞。

二、代码展示

public class ThreadTest7 {
    static  Thread thread1;
    public static void main(String[] args) throws InterruptedException {
        Thread thread=new Thread(()->{
            for (int i = 0; i < 1; i++) {
                try {
                    Thread.sleep(200);
                    //指定时间阻塞  TIMED_WAITING
                    System.out.println(thread1.getState()+"    thread");
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }

              //  System.out.println(i +" ");
            }
        });
        thread1=thread.currentThread();
        //NEW   有线程对象,但是还有start()
        System.out.println(thread.getState());
        thread.start();
        //RUNNABLE   正在执行,或者在准备就绪随时可以在CPU上执行
        System.out.println(thread.getState());
         Thread.sleep(1000);
         //执行完毕,但thread 对象存在
        System.out.println(thread.getState());

    }
}

代码结果:

BLOCKED:

public class ThreadTest8 {
    public static void main(String[] args) {
        Object  locker=new Object();
        Object locker1=new Object();
        Thread thread =new Thread(()->{
            synchronized (locker){
                System.out.println("thread");
                synchronized (locker1){
                    System.out.println("thread  你好:");
                }
            }
        });
        Thread thread1 =new Thread(()->{
            synchronized (locker1){
                System.out.println("thread1");
                synchronized (locker){
                    System.out.println("thread1 : 你好");
                }
            }
        });
        thread1.start();
        thread.start();
        System.out.println(thread1.getState());//RUNNABLE
        System.out.println(thread.getState());//BLOCKED
    }
}

执行结果:

上述展示了线程的五种状态,查看jconsole都可以观察到,waiting后序文章将介绍到。

三、状态转换之间的关系图

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值