当前位置: 首页 > article >正文

线程的状态(java)

“苦?     何止是苦~~~~~”

本期内容来分享一下线程状态相关的知识哦!!!

对于进程来说,进程是有两种状态的。

一种是就绪状态:正在CPU上执行,或者随时可以去CPU上执行的。

另一种是阻塞状态:暂时不能去CPU上执行的。

那么对于线程来说,线程也是有状态的,而且更加详细的分了六中状态,那么接下来,我们一起来了分别了解这六中状态吧。

状态一:新建(New)

对于NEW状态来说,虽然当前创建出了一个thread对象,但是内核的线程还没有(还没有调用start方法),没有在内核中真正创建出thread对象的(只有在调用start()方法之后,内核才会真正创建出线程)。

状态二:可运行(RUNNABLE)

该状态表示线程正在CPU上运行,或者随时可以去CPU上运行。

状态三:阻塞(Blocked)

该状态是由线程之间由于锁竞争锁引起的阻塞状态。

public class Demo3 {
    private static Object locker1 = new Object();
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            synchronized(locker1) {
                while(true) {

                }
            }
        },"t1");

        Thread t2 = new Thread(() -> {
            synchronized (locker1) {
                System.out.println("------");
            }
        },"t2");

        t1.start();
        //确保t1执行
        sleep(100);
        t2.start();

        
    }
}

 这个我们可以借助idk下的一个工具进行查看。首先先找到jdk所在的路径,然后点到bin目录下面去,然后找到jconsole.exe,运行jconsole,(在运行jconsole时,确保你的程序在运行着),然后选择本地进程里面的,你所运行着的代码文件名。之后点击连接,然后点击不安全连接,之后再点到线程那一栏,找到你的线程的名称,点进去就可以看见它的信息了。

 

 

那么上面我们看到,线程t2是一个BLOCKED状态,t1线程正在运行着,就是RUNNABLE。

那么这个工具也是我们之后如果遇到线程之类的一些问题,可以利用这个工具来查看线程的状态,这样便于我们检查或者排除一些问题。

 状态四:等待(WAITING)

没有超时时间的等待,由join/wait等引起的一种状态。

状态五: 定时等待(TIME_WAITING)

有超时时间的等待,比如sleep或者join(带参数版本)

状态六:终止(TERMINATED)

当前Thread对象虽然还在,但是内核的线程已经销毁了(线程已经结束了)

 下面假设一堆人去银行办理业务为例,有一个更清晰的了解:

相信大家看见这个图之后,有了多一些了解,了解线程的这六种状态,对于后续的多线程编程会有一定帮助的。

"感谢你阅读这篇文章!如果你觉得这篇文章对你有帮助,请分享给你的朋友。同时,欢迎在下方留言,告诉我你的想法或提出任何问题。"

好了,本期节目就到这里了,我们下期节目不见不散。


http://www.kler.cn/a/297345.html

相关文章:

  • 使用WMI改变显示器亮度
  • 浅谈C# MQTT
  • 数据结构之折半查找
  • 浅谈C#之ConcurrentDictionary
  • 投放Facebook广告开户全流程解析:从开户到广告投放的实用指南
  • Python入门3
  • 嵌入式学习——数据结构
  • 数据结构——初识数据结构
  • 《卷积神经网络 CNN 原理探秘》
  • 无人机之穿越机的类型
  • 线段树 + 懒标记 学习记录
  • Biopython从pdb文件中提取蛋白质链的信息
  • 兔英语语法体系——观后笔记
  • IP地址安全与隐私保护
  • 三生随记——黑神话之悟空的恐怖传奇
  • SOMEIP_ETS_098: SD_ClientService_subscribe_without_method_call
  • Vue组件:使用$emit()方法监听子组件事件
  • 【亲测有效】超高速扫描ip端口,可控制进程数,线程数,异步io链接并发数,超时时间,扫描到的端口服务信息说明
  • 传输层协议TCP
  • Java内存分配与回收:深入理解Java内存管理