ThreadGroup线程组应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ThreadGroup线程组应用

一、基本方法

1、获取当前线程组名

[java] view plain copy 在CODE上查看代码片派生到我的代码片Thread.currentThread().getThreadGroup().getName()

在main方法是调用输出是:main

2、将线程放入到一个线程组中去

[java] view plain copy 在CODE上查看代码片派生到我的代码片ThreadGroup threadGroup1 = new ThreadGroup("group1"); ThreadGroup threadGroup2 = new ThreadGroup("group2");

Thread thread1 =new Thread(threadGroup1, "group1's member"); Thread thread2 =new Thread(threadGroup2, "group2's member");

其中Thread中和ThreadGroup相关的构造函数:

[java] view plain copy 在CODE上查看代码片派生到我的代码片public Thread(ThreadGroup group, Runnable target) {

init(group, target, "Thread-" + nextThreadNum(), 0);

}

public Thread(ThreadGroup group, String name) {

init(group, null, name, 0);

}

public Thread(ThreadGroup group, Runnable target, String name) { init(group, target, name, 0);

}

public Thread(ThreadGroup group, Runnable target, String name,

long stackSize) {

init(group, target, name, stackSize);

}

它们最终都是调用同一个函数:

[java] view plain copy 在CODE上查看代码片派生到我的代码片private void init(ThreadGroup g, Runnable target, String name,

long stackSize) {

Thread parent = currentThread();

SecurityManager security = System.getSecurityManager();

if (g == null) {

//安全检查

if (security != null) {

g = security.getThreadGroup();

}

//设置线程组

if (g == null) {

g = parent.getThreadGroup();

}

}

//检查可达性

g.checkAccess();

//是否有权限访问

if (security != null) {

if (isCCLOverridden(getClass())) {

security.checkPermission(SUBCLASS_IMPLEMENTATION_PERMISSION);

}

}

//往线程组添加线程但未启动

g.addUnstarted();

this.group = g;

this.daemon = parent.isDaemon();//是否守护线程

this.priority = parent.getPriority();//优先级

= name.toCharArray();

if (security == null || isCCLOverridden(parent.getClass()))

this.contextClassLoader = parent.getContextClassLoader();

else

this.contextClassLoader = parent.contextClassLoader;

this.inheritedAccessControlContext = AccessController.getContext();

this.target = target;

setPriority(priority);

if (parent.inheritableThreadLocals != null)

this.inheritableThreadLocals =

ThreadLocal.createInheritedMap(parent.inheritableThreadLocals);

this.stackSize = stackSize;

tid = nextThreadID();

this.me = this;

}

3、复制线程组:

[java] view plain copy 在CODE上查看代码片派生到我的代码片

//这样可以复制group里面的thread信息

Thread[] threads = new Thread[threadGroup.activeCount()];

threadGroup.enumerate(threads);

相关文档
最新文档