13线程组(ThreadGroup)
线程组(ThreadGroup)
导言
线程组在实际开发中很少用到,本节将简单的来介绍一下它。
第一点获取线程组
第二点创建建设组
第三点给线程设置限制组
第四点介绍线程组常用的方法。
获取线程组
首先来看第一点,用thread类里面的getthreadgreap方法就可以获取到该线程所处的线程组,
如果该线程死亡,也就是线程执行完毕,则此方法返回null,否则返回该线程所处的线程组对象。
下面我们来演示该方法,以获取主线程所属的线程组为例,通过thread的类名调用currentthread的方法获取到当前线程,这里获取的就是主线程。然后调用线程的getthreadgroup方法获取所处的线程组,最后输出该线程组。
package com.chenjie.executor.day13; import com.chenjie.executor.day12.Task; /** * packageName com.chenjie.executor.day09 * * @author chenjie * @version JDK 8 * @className Main1 (此处以class为例) * @date 2024/5/27 * @description TODO */ public class Main { /** * 查询线程组信息 * @param args */ public static void main(String[] args) { Thread thread = Thread.currentThread(); ThreadGroup threadGroup = thread.getThreadGroup(); System.out.println(threadGroup); } }
从运行结果来看,线程组信息由三个部分组成。
java.lang.ThreadGroup[name=main,maxpri=10]
下面我们来逐一解释,首先是线程组对象的类型,也就是threadgroup类,该类是用来描述线程组的,
其次name等于main,表示该线程组的名称叫做main,
最后maxpri等于10,表示线程组最大可以设置的优先级。
这里的PR I是priority(优先)的所写,至此第一点介绍完了
创建线程组
再来看第二点,第二点是创建线程组,直接调用threadgroup类的构造方法就可以创建线程组,
它有两个可以用的构造方法,这是第一个可以指定线程组的名称,
还有一个不光可以指定线程组的名称,还可以指定线程组的父线程组,待会我们将会以第一个构造方法来作为演示方法。
设置线程组
第三点是设置线程组,是指线程组是通过thread类的构造方法来完成的
与之相关的有三个构造方法,这三个构造的方法都可以指定线程组。除此以外,第一个构造方法还可以指定线程名称,第二个构造方法还可以指定了runner波任务。第三个构造方法既可以指定线程名称,还可以指定runner部任务。
第一个
下面我们拿第一个构造的方法来做演示。首先创建一个线程组,然后指定线程组名称,创建一个线程,与此同时指定该线程所处的线程组,并指定它的名称,最后输出该线程。
package com.chenjie.executor.day13; /** * packageName com.chenjie.executor.day09 * * @author chenjie * @version JDK 8 * @className Main1 (此处以class为例) * @date 2024/5/27 * @description TODO */ public class Main1 { /** * 查询线程组信息 * @param args */ public static void main(String[] args) { ThreadGroup group = new ThreadGroup("人人都是程序员"); Thread thread = new Thread(group,"线程"); System.out.println(thread); } }
从运行结果来看,线程名称和所属的线程组和我们自定义的一致至此。第三点介绍完了。
Thread[线程,5,人人都是程序员]
第二个
package com.chenjie.executor.day13; /** * packageName com.chenjie.executor.day09 * * @author chenjie * @version JDK 8 * @className Main1 (此处以class为例) * @date 2024/5/27 * @description TODO */ public class Main2 { /** * 查询线程组信息 * @param args */ public static void main(String[] args) { Task task=new Task(); ThreadGroup group = new ThreadGroup("人人都是程序员"); Thread thread = new Thread(group,task); System.out.println(thread); } }
第三种
package com.chenjie.executor.day13; /** * packageName com.chenjie.executor.day09 * * @author chenjie * @version JDK 8 * @className Main1 (此处以class为例) * @date 2024/5/27 * @description TODO */ public class Main3 { /** * 查询线程组信息 * @param args */ public static void main(String[] args) { Task task=new Task(); ThreadGroup group = new ThreadGroup("人人都是程序员"); Thread thread = new Thread(group,task,"线程"); System.out.println(thread); } }
线程组中常用的方法有哪些?
再来看最后一点,线程组中常用的方法有哪些?线程组中常用的方法一共有5个,
第一个getname方法它用于获取线程组名称。第二个setmaxpriority方法,它用于设置线程组最大优先级。第三个 getmaxpriority方法。它用于获取线程组最大优先级。第四个activecount的方法,它用于获取线程组存活的线程的数量。第五个interrupt方法它用于中段线程组中所有线程。
main4
package com.chenjie.executor.day13; /** * packageName com.chenjie.executor.day09 * * @author chenjie * @version JDK 8 * @className Main1 (此处以class为例) * @date 2024/5/27 * @description TODO */ public class Main4 { /** * 查询线程组信息 * @param args */ public static void main(String[] args) { ThreadGroup group = new ThreadGroup("人人都是程序员"); System.out.println("线程组的名称"+group.getName()); System.out.println("线程组的最大优先级"+group.getMaxPriority()); //设置线程组的最大优先 group.setMaxPriority(1); System.out.println("修改后线程组的最大优先级"+group.getMaxPriority()); Thread thread=new Thread(group,"线程"); thread.start(); System.out.println("线程组存货的线程数量"+group.activeCount()); //中断线程组中所有的线程 group.interrupt(); try { Thread.sleep(1000L); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println("线程组存货的线程数量"+group.activeCount()); } }
定义task
package com.chenjie.executor.day13; /** * packageName com.chenjie.executor.day09 * * @author chenjie * @version JDK 8 * @className PringTask (此处以class为例) * @date 2024/5/27 * @description TODO */ public class Task implements Runnable{ @Override public void run() { try { Thread.sleep(5000L); } catch (InterruptedException e) { throw new RuntimeException(e); } } }
结果
线程组的名称人人都是程序员
线程组的最大优先级10
修改后线程组的最大优先级1
线程组存货的线程数量1
线程组存货的线程数量0
总结
最后我们来总结一下本节内容,本节介绍了获取线程所处的线程组threadgroup方法以及创建线程组和设置线程组,线程组在实际开发中几乎不会用到它,所以大家只需知道此知识点即可。
本文来自博客园,作者:小陈子博客,转载请注明原文链接:https://www.cnblogs.com/cj8357475/p/16086016.html