【Java多线程】线程中几个常见的属性以及状态

目录

Thread的几个常见属性

1、Id

2、Name名称

3、State状态

4、Priority优先级

5、Daemon后台线程

6、Alive存活

Thread的几个常见属性

1、Id

ID 是线程的唯一标识,由系统自动分配,不同线程不会重复。

2、Name名称

用户定义的名称。该名称在各种调试工具中都会用到。

3、State状态

状态表示线程当前所处的一个情况。和进程一样,线程也有状态,Java中对线程的状态又进一步的区分,表达得更加丰富。

  • **NEW(新建状态):**Thread对象创建了,但是还没有调用start,内核中的线程还没创建。
  • **RUNNABLE(可运行状态):**线程就绪(正在cpu上执行,或者等待调度)
  • **BLOCKED(阻塞状态):**由于锁竞争引起的阻塞
  • **WAITING(等待状态):**通过 wait/join 等不带时间的方法进入的阻塞。
  • **TIMED_WAITING(定时等待状态):**通过 sleep 等带有时间的方法进入的阻塞。
  • **TERMINATED(终止状态):**run方法执行完毕,内核中的线程已经销毁。

4、Priority优先级

顾名思义,但是在Java中设置优先级,效果可能不太明显(由于系统的随机调度)。

5、Daemon后台线程

Daemon后台线程 ,又称守护线程 。与之对应的是前台线程。前台线程 的运行,会阻止进程结束;后台线程的运行,不会阻止进程结束。jvm内置的线程都为后台线程。

java 复制代码
    public static void main(String[] args) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("hello thread");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }, "自定义线程名称");
        t.start();
    }

以上代码中,t 线程就属于前台线程

即点击执行后,main会直接执行完毕,而此时 t 线程仍然会一直循环打印"hello thread"

也证明了 t 线程阻止了进程的结束,因此就是前台线程。

java 复制代码
    public static void main(String[] args) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("hello thread");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                }
            }
        }, "自定义线程名称");
        t.setDaemon(true);  //在start启动前,设置线程为后台线程
        t.start();
    }

此时 t 线程就无法阻止进程的结束

结果就是不会打印 "hello thread" 或者只打印了一次(因为随机调度)

6、Alive存活

alive存活,表示内核中的线程(PCB)是否还存在。

java 复制代码
    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread(new Runnable() {  //此时只是有了t对象,但是内核pcb还没有
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);   //sleep一秒
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }, "自定义线程名称");
        System.out.println(t.isAlive());   //false
        t.start();    //start后,才真正在内核中创建出pcb
        System.out.println(t.isAlive());   //true
        Thread.sleep(2000);   //sleep两秒,等待t线程结束
        System.out.println(t.isAlive());   //false
    }

t 线程执行完后,内核pcb也随之释放,但是当程序还未结束时,t 变量还存在,此时也为false

【Java多线程】Thread类的基本用法-CSDN博客https://blog.csdn.net/zzzzzhxxx/article/details/136121421?spm=1001.2014.3001.5501
【数据结构】二叉树的三种遍历(非递归讲解)-CSDN博客https://blog.csdn.net/zzzzzhxxx/article/details/136044643?spm=1001.2014.3001.5501对进程与线程的理解-CSDN博客https://blog.csdn.net/zzzzzhxxx/article/details/136115808?spm=1001.2014.3001.5501

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

相关推荐
m0_613856293 分钟前
mysql如何利用事务隔离级别解决特定业务冲突_mysql隔离方案选型
jvm·数据库·python
abcnull17 分钟前
用javaparser做精准测试
java·ast·静态代码分析·精准测试·javaparser
叶小鸡23 分钟前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
AI人工智能+电脑小能手39 分钟前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
juniperhan1 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_180079054731 小时前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路1 小时前
C++23概述
java·c++·c++23
时空系1 小时前
第10篇:继承扩展——面向对象编程进阶 python中文编程
开发语言·python·ai编程
专注API从业者2 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
sakiko_2 小时前
UIKit学习笔记4-使用UITableView制作滚动视图
笔记·学习·ios·swift·uikit