Java多线程:线程属性
# 线程属性
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
源码:
如果没有指定线程的名称,则默认是
"Thread-" + nextThreadNum()
。nextThreadNum()
为线程安全的一个自增。
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());}
}
结果
Java多线程:线程属性相关推荐
- Java多线程——线程的优先级和生命周期
Java多线程--线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...
- java多线程 线程安全_Java中的线程安全
java多线程 线程安全 Thread Safety in Java is a very important topic. Java provides multi-threaded environme ...
- java多线程-线程的停止【interrupt】
java多线程-线程的停止 文章目录 java多线程-线程的停止 线程停止的原理 如何正确停止线程 在普通情况下停止线程 代码展示 在阻塞情况下停止线程 代码展示 线程在每次迭代后都阻塞 代码展示 停 ...
- Java 多线程线程安全(面试概念解答二)
Java 多线程线程安全 什么是线程安全? 为什么有线程安全问题? 线程安全解决办法? 同步代码块 同步函数 静态同步函数 多线程死锁 多线程的三大特性 原子性 可见性 有序性 Java内存模型 Vo ...
- JAVA --- 多线程 -- 线程的创建
JAVA - 多线程 – 线程的创建 线程的概念: 说起线程,先说程序和进程,多任务的概念. 程序(program):是指令和数据的有序集合,本身没有任何运行的含义,是一个静态的概念. 进程(proc ...
- Java多线程-线程的创建(Thread类的基本使用)
文章目录 一. 线程和Thread类 1. 线程和Thread类 1.1 Thread类的构造方法 1.2 启用线程的相关方法 2. 创建第一个Java多线程程序 3. 使用Runnable对象创建线 ...
- Java多线程-线程的同步与锁
一.同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 例如:两个线程ThreadA.ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据. package ...
- Java多线程 ——线程基础和锁锁锁
Java多线程(一) 一.线程的定义 二.Synchronize线程同步 三.偏向锁.自旋锁.重量级锁 四.volatile关键字 4.1.普通变量运算的物理意义 4.2.有无解决的方案 4.3.vo ...
- 【Java系列】(四)Java多线程---线程安全
前言: 记得大一刚学Java的时候,老师带着我们做了一个局域网聊天室,用到了AWT.Socket.多线程.I/O,编写的客户端和服务器,当时做出来很兴奋,回学校给同学们演示,感觉自己好NB,呵呵,扯远 ...
- Java多线程——线程池的饥饿现象
概述 定长线程池的使用过程中会存在饥饿现象,也就是当多线程情况下,当池中所有线程都被占用后,被占用的线程又需要空闲线程去进行下一步的操作,此时又获取不到池中空闲的线程,此时就出现了饥饿现象. 示例 p ...
最新文章
- mysql查询有数据但返回null_mybaits sql查询有数据 映射时返回结果却是null 为什么呢求指导...
- Spring Boot 配置文件 yml与properties
- Spring AOP 本质(3)
- django-分页的演示
- 为什么要学Win32及Win32程序框架
- c语言上机考试设计题及答案,C语言程序设计基础上机考试一题目及参考答案.doc...
- C#与Java之比较
- 变频器22b系列说明书_变频器接电位器正确接法
- 别人问了个问题:有没有选择JAVA开发的设计文档
- jquery文档就绪函数
- Android11安装谷歌,Android 11正式版
- TCP/IP五层模型
- arcgis 属性表中起点终点创建线_一种GIS单线路网自动生成双线路网的方法与流程...
- 建瓯最坏的YARA - APT | 病毒检测 | 常用模块和字段
- antd提交表单_antd快速开发(Form篇)
- FIR滤波器窗口设计法和频率采样设计法
- 【机器学习】线性回归实战案例一:多元素情况下广告投放效果分析步骤详解
- 数据模型是什么,有哪些常见的分析方法? 财务、人力、运营等数据分析人士必看!(内附2000+套数据可视化模版)
- 插画师的配色灵感分享
- 为何 Linus 一个人就能写出这么强的系统?