Thread(ThreadGroup group, Runnable target, String name, long stackSize);
意义:线程组,默认使用 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();
}
}
? ? ? ? ? 该线程组中活着的线程数量
? ? ? ? ? 将该线程组中的线程对象,放置到??hread[] 中
含义:实际的执行任务
? ?含义:线程名称
? ? 默认值:
int threadNum= "Thread-" + nextThreadNum();
private static int threadInitNumber;
private static synchronized int nextThreadNum() {
return threadInitNumber++;
}
因此默认的thread规则为: Thread-0,Thread-2,Thread-3,Thread-4......
含义:栈帧的大小
该值过大,创建线程的个数就会变小
(栈内存固定,单个线程占用的越多,则创建线程的个数越小)
根据平台是否生效(该参数在某些环境是无效的)
警告:不要显示的定义,一般在平台定义。如,linux系统 -xss?
- -Xss 为jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M
含义:优先级
高优先级的线程,获取到的cpu机会更大
警告:高优先级的线程 不一定 比低优先级的线程先执行
含义:是否是守护线程,做一些辅助性的工作
?守护线程:? 应用线程存在时,守护线程不会终止
场景:守护线程用于后台支持任务,比如垃圾回收、释放未使用对象的内存、从缓存中删除不需要的条目、网络链接的维护
创建链接的线程中,new一个daemon线程做心跳检查,维持心跳不会停止。直到当前线程终止,daemon线程才会终止
JVM在只有daemon线程时,会退出(此时没有普通的任务线程)
问题: 有多个daemon线程,部分任务线程终结,daemon线程怎么变化
? ? ? ? daemon线程会一致存在,直到所有的普通线程终止,然后daemon线程才会终止,进而jvm线程终止
潜在问题:如果是短期的辅助任务,不应该使用daemon线程,因为该线程无法被终止
解释:长期运行的后台线程,直到所有的普通线程全部终止,daemon线程才会终止
https://www.twle.cn/c/yufei/javatm/javatm-basic-daemon-thread.html