java线程组和线程

java程序的线程组和线程的结构:

main线程下创建thread8:
Thread thread8 = new Thread(new ThreadGroup("hello"),"t8");
//获取顶层的system 线程组
while(tg.getParent()!=null){
    //System.out.println(tg);
    tg = tg.getParent();
}
//列出信息
tg.list();
目录结构
ThreadGroup采用树的结构管理着所有线程和线程组,顶层的是system,旗下有main组:
    java.lang.ThreadGroup[name=system,maxpri=10]maxpri优先级)
        Thread[Reference Handler,10,system] 引用处理
        Thread[Finalizer,8,system]          终结器
        Thread[Signal Dispatcher,9,system]  信号调度
        Thread[Attach Listener,5,system]    附加监听器
        java.lang.ThreadGroup[name=main,maxpri=10]  主线程组
            Thread[main,5,main]             主线程
            java.lang.ThreadGroup[name=hello,maxpri=10] 自定义hello线程组
                Thread[t8,5,hello]          hello组下的线程

ThreadGroup和Thread就好比文件夹与文件的关系,Thread不能独立于ThreadGroup存在,就像所有的文件都会有个目录一样。而ThreadGroup能管理着旗下的ThreadGroup和Thread,也类似于文件夹管理子文件夹和文件。

操作方法有:

int activeCount()
返回此线程组及其子组中活动线程数的估计。
int activeGroupCount()
返回此线程组及其子组中活动组数的估计。
boolean allowThreadSuspension(boolean b)
已过时。 
此调用的定义取决于suspend()哪些已被弃用。此外,从未指定此调用的行为。
void    checkAccess()
确定当前运行的线程是否有权限修改此线程组。
void    destroy()
销毁此线程组及其所有子组。
int enumerate(Thread[] list)
将此线程组及其子组中的每个活动线程复制到指定的数组中。
int enumerate(Thread[] list, boolean recurse)
将此线程组中的每个活动线程复制到指定的数组中。
int enumerate(ThreadGroup[] list)
复制到该线程组及其子组中每个活动子组的指定数组引用。
int enumerate(ThreadGroup[] list, boolean recurse)
复制到该线程组中每个活动子组的指定数组引用。
int getMaxPriority()
返回此线程组的最大优先级。
String  getName()
返回此线程组的名称。
ThreadGroup getParent()
返回此线程组的父级。
void    interrupt()
中断此线程组中的所有线程。
boolean isDaemon()
测试此线程组是否是守护线程组。
boolean isDestroyed()
测试此线程组是否已被破坏。
void    list()
将有关此线程组的信息打印到标准输出。
boolean parentOf(ThreadGroup g)
测试此线程组是线程组参数还是其祖先线程组之一。
void    resume()
已过时。 
此方法仅与Thread.suspend和ThreadGroup.suspend结合使用 ,两者都已被弃用,因为它们本身就是容易死锁的。看Thread.suspend()详情。
void    setDaemon(boolean daemon)
更改此线程组的守护程序状态。
void    setMaxPriority(int pri)
设置组的最大优先级。
void    stop()
已过时。 
这种方法本质上是不安全的。看 Thread.stop()详情。
void    suspend()
已过时。 
这种方法本质上是死锁的。看 Thread.suspend()详情。
String  toString()
返回此Thread组的字符串表示形式。
void    uncaughtException(Thread t, Throwable e)
当该线程组中的线程由于未捕获的异常而停止时,由Java虚拟机调用,并且该线程没有特定的Thread.UncaughtExceptionHandler 安装。

ThreadGroup管理机制

这里写图片描述
从上面的方法上看,ThreadGroup提供了一系列的操作线程的方法,比如:interrupt,stop,resume等。
但并没暴露add(),remove()线程的方法。ThreadGroup添加和移除线程交给的是Thread管理。
初始化一个Thread时,会在内部保持一个对ThreadGroup的引用。直到启动该线程时,才会将Thread添加到ThreadGroup中,线程执行完毕或启动失败,才会退出组
即线程组和线程的关系是:
Thread决定ThreadGroup中的threads;
ThreadGroup统一管理Thread的状态。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值