Java中ThreadGroup的原理和使用方法

本篇内容主要讲解“Java中ThreadGroup的原理和使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中ThreadGroup的原理和使用方法”吧!

10年积累的网站制作、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先制作网站后付款的网站建设流程,更有郏县免费网站建设让你可以放心的选择与我们合作。

1. 引子

Thread类有多个构造函数,其中一个如下:

public Thread(ThreadGroup group, String name) {
  init(group, null, name, 0);
}

传入一个ThreadGroup参数,表示当前线程所属的线程组。源码中上面的init最终实现如下:

private void init(ThreadGroup g, Runnable target, String name,
                  long stackSize, AccessControlContext acc,
                  boolean inheritThreadLocals) {
  ......
    if (g == null) {
      g = parent.getThreadGroup();
    }
}

可知:如果没有设置这个线程组,那么创建的线程的线程组即为其父线程的线程组,也就是当前线程。如果当前线程是main线程,main线程的group名字也叫main,那么在main方法中创建的新线程的group也是main。本文就ThreadGroup类进行学习。

2. 创建ThreadGroup

线程有父子之称,线程组也有父子之称。

ThreadGroup类的构造函数有:

public ThreadGroup(ThreadGroup parent, String name);
public ThreadGroup(String name) {
    this(Thread.currentThread().getThreadGroup(), name);
}

构造函数可以指定当前创建的线程组的父线程组,如果没有指定就指定当前线程的线程组作为新创建的线程组的父线程组。

下面是一个demo进行验证,结果打印为true。

public static void main(String[] args) throws Exception {

  ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();

  ThreadGroup threadGroup1 = new ThreadGroup("threadGroup1");

  System.out.println(threadGroup1.getParent() == threadGroup);

}

2. ThreadGroup复制

一个线程组中可以添加多个线程和子线程组,可以使用其复制方法,复制出这些线程和线程组:

public int enumerate(Thread list[]);
public int enumerate(Thread list[], boolean recurse);

参数recurse为true表示递归将所有子线程组中的线程也拷贝到数组中,如果没有这个参数,默认就是true。

除了拷贝线程组中的线程以外,还可拷贝线程组中的子线程组:

public int enumerate(ThreadGroup list[]);
public int enumerate(ThreadGroup list[], boolean recurse);

recurse意思也是表示是否进行递归和拷贝。

3. 总结

线程组不是用来管理线程的,而是针对线程的一次组织。

到此,相信大家对“Java中ThreadGroup的原理和使用方法”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


网站栏目:Java中ThreadGroup的原理和使用方法
本文网址:http://azwzsj.com/article/ijscee.html