Java多线程:线程属性
生活随笔
收集整理的这篇文章主要介绍了
Java多线程:线程属性
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
# 线程属性
-
id:
-
线程唯一标识。自动生成。不允许修改。
-
-
name:
-
线程的名字,可以自定义成有具体含义的名字,便于识别不同作用的线程。(可同名)
-
-
isDaemon:
-
是否是守护线程。
-
true=守护线程,false=用户线程。
-
当JVM中所有的线程都是守护线程,JVM将退出。
-
具有代表性的线程: main线程:用户线程,gc线程:守护线程。
-
子线程会默认继承父线程的这个属性。
-
必须在调用start()之前设置这个属性,线程运行中设置线程守护属性会抛出异常。
-
-
priority
-
线程优先级。
-
优先级高的线程概率上会优先运行。并不可靠.
-
Java中的线程优先级有10个,默认是5,且子线程会继承父线程的优先级。
-
不可靠:java中的线程优先级有10个,但是OS的线程优先级并不一定是10个,所以存在java中好几个优先级对应OS中的同一个优先级,不可靠。
-
程序不应该依赖优先级。
-
优先级一般默认设置成5即可。
-
-
# ID
-
源码
-
线程初始化方法init()会给线程设置id,该id通过被synchronized标记的nextThreadID()方法获取,id自增。
# NAME
-
源码:
-
如果没有指定线程的名称,则默认是"Thread-" + nextThreadNum()。nextThreadNum()为线程安全的一个自增。
-
还可以通过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());} }-
结果
总结
以上是生活随笔为你收集整理的Java多线程:线程属性的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Java多线程:捕获线程异常
- 下一篇: Java 线程池中的线程复用是如何实现的