Java线程属性详解

本文介绍了Java中线程的四个关键属性:线程ID、名称、守护线程和优先级。线程ID是唯一的不可修改的标识;线程名称用于调试和区分线程;守护线程为用户线程提供服务,所有用户线程结束后守护线程才会停止;优先级默认为5,设置优先级在不同系统中效果可能不同。在开发中,应避免过度依赖守护线程和手动设置优先级。
摘要由CSDN通过智能技术生成

简介

本节来介绍下Java中线程的属性,即线程的编号(ID)、名称(Name)、守护线程(Daemon)、优先级(Priority),讲解下这些属性各自的作用,以及开发中需要注意的事项。
在这里插入图片描述

一.线程ID

线程的ID用于标识不同的线程,每个线程ID都不同,且不能够被修改。

我们创建的线程ID不是从2开始的递增的,因为JVM启动时会创建其他线程。

二.线程名称

让程序员在开发调试中,容易区分不同线程,定位问题而设立的属性

这个属性将是程序员唯一常用的线程属性,其他属性并不常用,甚至不应该使用。

线程创建后是可以修改名称的,但线程运行起来以后则不能再修改名称了

三.守护线程

守护线程作用是给用户线程提供服务的

如何设置守护线程

setDaemon(true)中,ture表示是守护线程,false表示是用户线程。必须在线程运行前才有效,否则无效

thread.setDaemon(true);
thread.start();

main函数是守护线程吗

不是,main函数是用户线程。

线程Debug状态下查看是否是守护线程

在这里插入图片描述

守护线程何时停止

在所有用户线程停止后,守护线程会和JVM一起停止运行。

例如:垃圾回收线程就是守护线程,它为用户线程提供服务,当JVM退出后,垃圾回收线程也将停止运行,不再消耗系统资源。

是否应该将线程设为守护线程

在开发中,应该尽量避免使用守护线程,而使用用户线程,因为守护线程在JVM离开后,代码将不执行,此时会造成数据不一致问题。

四.线程优先级

Java线程的优先级有10级,最小1级,最高10级,默认是5级。创建线程时,优先级自动继承父线程的优先级。

Java优先级定义源码

/**
  * The minimum priority that a thread can have.
  */
 public final static int MIN_PRIORITY = 1;
/**
  * The default priority that is assigned to a thread.
  */
 public final static int NORM_PRIORITY = 5;
 /**
  * The maximum priority that a thread can have.
  */
 public final static int MAX_PRIORITY = 10;

是否需要手动设置线程优先级?

不需要,因为优先级是有Java程序运行的系统决定的,并非设置了就会生效。不同的操作系统优先级和线程的优先级对应关系不同。如Linux是没有优先级概念的,所有线程优先级在Linux运行都一样。但在有些操作系统中,优先级是可以升级和降级的,所以,在编写代码时,最好不要指定优先级,采用默认即可。

总结

本文介绍线程的四个属性,其实除了线程名称属性,其他属性在编码过程中,是无需人为指定的。线程的ID、优先级和守护线程更多的是用作只读属性使用,并不需要手动修改默认配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值