点击上方 IT牧场 ,选择 置顶或者星标
技术干货每日送达
# 线程属性
-
id:
-
线程唯一标识。自动生成。不允许修改。
-
name:
-
线程的名字,可以自定义成有具体含义的名字,便于识别不同作用的线程。(可同名)
-
isDaemon:
-
是否是守护线程。
-
true=守护线程,false=用户线程。
-
当JVM中所有的线程都是守护线程,JVM将退出。
-
具有代表性的线程: main线程:用户线程,gc线程:守护线程。
-
子线程会默认继承父线程的这个属性。
-
必须在调用
start()
之前设置这个属性,线程运行中设置线程守护属性会抛出异常。 -
priority
-
线程优先级。
-
优先级高的线程概率上会优先运行。并不可靠.
-
Java中的线程优先级有10个,默认是5,且子线程会继承父线程的优先级。
-
不可靠:java中的线程优先级有10个,但是OS的线程优先级并不一定是10个,所以存在java中好几个优先级对应OS中的同一个优先级,不可靠。
-
程序不应该依赖优先级。
-
优先级一般默认设置成5即可。
# ID
/* For generating thread ID */
private static long threadSeqNumber;
private void init(ThreadGroup g, Runnable target, String name,
long stackSize, AccessControlContext acc,
boolean inheritThreadLocals) {
...
/* Set thread ID */
tid = nextThreadID();
...
}
private static synchronized long nextThreadID() {
return ++threadSeqNumber;
}
-
线程初始化方法
init()
会给线程设置id,该id通过被synchronized标记的nextThreadID()
方法获取,id自增。
# NAME
-
源码:
private static synchronized int nextThreadNum() { return threadInitNumber++; }
-
还可以通过
thread.setName()
设置线程名称。
# 代码演示
/** * @author 喜欢天文的pony站长 * Created on 2020/6/16. */ public class ThreadProperties { private static final Logger LOGGER = LoggerFactory.getLogger(ThreadProperties.class); public static void main(String[] args) { Thread mainThread = Thread.currentThread(); Thread childThread = new Thread(() -> { try { TimeUnit.SECONDS.sleep(2L); } catch (InterruptedException e) { e.printStackTrace(); Thread.currentThread().interrupt(); } }); //必须在start()之前设置线程的优先级 //childThread.setDaemon(true); childThread.start(); LOGGER.info("main线程的id:{}", mainThread.getId()); LOGGER.info("子线程的id:{}", childThread.getId()); LOGGER.info("main线程的名字:{}", mainThread.getName()); LOGGER.info("子线程的名字(修改之前):{}", childThread.getName()); childThread.setName("childThread-1"); LOGGER.info("子线程的名字(修改之后):{}", childThread.getName()); LOGGER.info("main线程是否是守护线程{}", mainThread.isDaemon()); LOGGER.info("子线程线程是否是守护线程{}", childThread.isDaemon()); //不能在线程运行过程中设置线程的优先级 childThread.setDaemon(true); LOGGER.info("子线程线程是否是守护线程{}", childThread.isDaemon()); } }
-
结果

image.png
欢迎在评论区留下你看文章时的思考,及时说出,有助于加深记忆和理解,还能和像你一样也喜欢这个话题的读者相遇~
干货分享
最近将个人学习笔记整理成册,使用PDF分享。关注我,回复如下代码,即可获得百度盘地址,无套路领取!
• 001:《Java并发与高并发解决方案》学习笔记; • 002:《深入JVM内核——原理、诊断与优化》学习笔记; • 003:《Java面试宝典》 • 004:《Docker开源书》 • 005:《Kubernetes开源书》 • 006:《DDD速成(领域驱动设计速成)》 • 007: 全部 • 008: 加技术群讨论
近期热文
关注我
喜欢就点个"在看"呗^_^
原文
http://mp.weixin.qq.com/s?__biz=MzI4ODQ3NjE2OA==&mid=2247487243&idx=1&sn=e2c93871fc6b40fa26b494e23d7d0dde
本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java多线程:线程属性