Thread-构造函数,属性详解
Thread(ThreadGroup group, Runnable target, String name, long stackSize);
ThreadGroup group
意义:线程组,默认使用 parent所在的线程组( parent:创建当前线程的线程)
如:main线程启动的?ThreadGroup 是main, main中启动的线程的?ThreadGroup 默认也是main
if (g == null) {
if (security != null) {
g = security.getThreadGroup();
}
if (g == null) {
g = parent.getThreadGroup();
}
}
作用: 将相同类型的线程任务放置到同一个 group中,便于后续的批量处理
private static void threadGroup(ThreadGroup threadGroup) {
// 获取线程组中活着的线程数量
int activeCount = threadGroup.activeCount();
// 获取当前线程组中的线程
Thread[] threadArr = new Thread[activeCount];
threadGroup.enumerate(threadArr);
// 循环处理线程
for (Thread thread : threadArr) {
String name = thread.getName();
// 中断线程
thread.interrupt();
}
}
- threadGroup.activeCount()
? ? ? ? ? 该线程组中活着的线程数量
- threadGroup.enumerate(Thread[] threads)
? ? ? ? ? 将该线程组中的线程对象,放置到??hread[] 中
Runnable target
含义:实际的执行任务
String name
? ?含义:线程名称
? ? 默认值:
int threadNum= "Thread-" + nextThreadNum();
private static int threadInitNumber;
private static synchronized int nextThreadNum() {
return threadInitNumber++;
}
- ?使用? ?"Thread-" + nextThreadNum()? 计算默认名称
因此默认的thread规则为: Thread-0,Thread-2,Thread-3,Thread-4......
long stackSize
含义:栈帧的大小
该值过大,创建线程的个数就会变小
(栈内存固定,单个线程占用的越多,则创建线程的个数越小)
根据平台是否生效(该参数在某些环境是无效的)
警告:不要显示的定义,一般在平台定义。如,linux系统 -xss?
- -Xss 为jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M
int priority
含义:优先级
高优先级的线程,获取到的cpu机会更大
警告:高优先级的线程 不一定 比低优先级的线程先执行
boolean daemon
含义:是否是守护线程,做一些辅助性的工作
?守护线程:? 应用线程存在时,守护线程不会终止
场景:守护线程用于后台支持任务,比如垃圾回收、释放未使用对象的内存、从缓存中删除不需要的条目、网络链接的维护
创建链接的线程中,new一个daemon线程做心跳检查,维持心跳不会停止。直到当前线程终止,daemon线程才会终止
JVM在只有daemon线程时,会退出(此时没有普通的任务线程)
问题: 有多个daemon线程,部分任务线程终结,daemon线程怎么变化
? ? ? ? daemon线程会一致存在,直到所有的普通线程终止,然后daemon线程才会终止,进而jvm线程终止
潜在问题:如果是短期的辅助任务,不应该使用daemon线程,因为该线程无法被终止
解释:长期运行的后台线程,直到所有的普通线程全部终止,daemon线程才会终止
https://www.twle.cn/c/yufei/javatm/javatm-basic-daemon-thread.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!