Thread-构造函数,属性详解

2023-12-24 18:28:10
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++;
}

  1. ?使用? ?"Thread-" + nextThreadNum()? 计算默认名称

因此默认的thread规则为: Thread-0,Thread-2,Thread-3,Thread-4......

long stackSize

含义:栈帧的大小

该值过大,创建线程的个数就会变小

(栈内存固定,单个线程占用的越多,则创建线程的个数越小)

根据平台是否生效(该参数在某些环境是无效的)

警告:不要显示的定义,一般在平台定义。如,linux系统 -xss?

  1. -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

文章来源:https://blog.csdn.net/Draymond_feng/article/details/135181435
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。