本篇内容主要讲解“Java中ThreadGroup的原理和使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中ThreadGroup的原理和使用方法”吧!
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类进行学习。
线程有父子之称,线程组也有父子之称。
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); }
一个线程组中可以添加多个线程和子线程组,可以使用其复制方法,复制出这些线程和线程组:
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意思也是表示是否进行递归和拷贝。
线程组不是用来管理线程的,而是针对线程的一次组织。
到此,相信大家对“Java中ThreadGroup的原理和使用方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。