前面的文章,栈长和大家分享过多线程创建的3种方式《实现 Java 多线程的 3 种方式》。

但如果线程很多的情况下,你知道如何对它们进行分组吗?

和 Dubbo 的服务分组一样,Java 可以对相同性质的线程进行分组。

来看下线程类 Thread 的所有构造方法。

如图所示,带有 ThreadGroup 的所有线程构造方法都可以定义线程组的。

线程组使用 java.lang.ThreadGroup 类定义,它有两个构造方法,第二个构造方法允许线程组有父类线程组,也就是说一个线程组可以多个子线程组。

java.lang.ThreadGroup#ThreadGroup(java.lang.String)
java.lang.ThreadGroup#ThreadGroup(java.lang.ThreadGroup, java.lang.String)

线程组中比较有用的几个方法。

// 获取当前线程组内的运行线程数
java.lang.ThreadGroup#activeCount

// 中断线程组内的所有线程
java.lang.ThreadGroup#interrupt

// 使用 System.out 打印出所有线程信息
java.lang.ThreadGroup#list()

我们来简单使用下线程组吧!

public static void main(String[] args) {Runnable runnable = () -> {System.out.println("Java技术栈线程线程组名称:" + Thread.currentThread().getThreadGroup());System.out.println("Java技术栈线程线程名称:" + Thread.currentThread().getName());try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}};ThreadGroup userGroup = new ThreadGroup("user");userGroup.setMaxPriority(Thread.MIN_PRIORITY);Thread userTask1 = new Thread(userGroup, runnable, "user-task1");Thread userTask2 = new Thread(userGroup, runnable, "user-task2");userTask1.start();userTask2.start();System.out.println("Java技术栈线程线程组活跃线程数:" + userGroup.activeCount());userGroup.list();}

程序输出以下结果。

Java技术栈线程线程组名称:java.lang.ThreadGroup[name=user,maxpri=1]
Java技术栈线程线程名称:user-task1
Java技术栈线程线程组活跃线程数:2
Java技术栈线程线程组名称:java.lang.ThreadGroup[name=user,maxpri=1]
Java技术栈线程线程名称:user-task2
java.lang.ThreadGroup[name=user,maxpri=1]Thread[user-task1,1,user]Thread[user-task2,1,user]

根据示例代码和程序输出结果应该对线程组有了一个大概的了解吧。

线程组还能统一设置组内所有线程的最高优先级,线程单独设置的优先级不会高于线程组设置的最大优先级。

另外,线程组中有一个 stop 方法用来终止组内所有的线程,但这个方法和 Thread 中的 stop 方法一样会带来很多问题,所以它们两个现在都已经被废弃了,官方也是不建议使用了,建议使用线程中断功能进行优雅终止线程。

Java多线程可以分组,还能这样玩!相关推荐

  1. Java多线课程,java多线程课程.doc

    java多线程课程.doc 还剩 9页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 如下:线程 A:休眠 10s线程 B:休眠 20s线程 C: 休眠 ...

  2. java 线程分组_Java多线程可以分组,还能这样玩!

    前面的文章,栈长和大家分享过多线程创建的3种方式<实现 Java 多线程的 3 种方式>. 但如果线程很多的情况下,你知道如何对它们进行分组吗? 和 Dubbo 的服务分组一样,Java ...

  3. Java 11 已发布,String 还能这样玩!

    在文章<Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码>中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来 ...

  4. Java多线程开发系列之四:玩转多线程(线程的控制2)

    在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...

  5. java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...

  6. call线程起名字_高级分享:Java多线程你真的理解透彻了吗?带你玩转一次多线程!...

    不知道怎么引入正文 相信后端同学在开发的时候多多少少都会涉及到多线程开发,作为Java开发的我也同样会经常用到多线程开发. 我认为Java语言在处理多线程上是非常优秀的,我们可以使用简明的代码实现线程 ...

  7. Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信

    前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  8. java复习系列[2] - Java多线程

    文章目录 JUC thread 线程状态 sleep() 与 wait() 的异同点 wait() 与 阻塞 的异同点 Some Question !!! 有了**sleep()**为什么还要有**w ...

  9. 计算机是如何工作的,Java多线程编程

    一.冯诺依曼体系 现代的计算机,大多遵守 冯诺依曼体系结构 (Von Neumann Architecture) CPU 中央处理器: 进行算术运算和逻辑判断. AMD Ryzen 7 580OU w ...

最新文章

  1. STM32 LCD中英文字符显示学习笔记
  2. Linux高并发应用类型对系统内核的优化
  3. java参数值注入_在springboot中使用注解将值注入参数的操作
  4. Data Pump failed with ORA-04031/ORA-4030?
  5. TOSCA自动化测试工具安装
  6. 浅析Hibernate映射(五)——集合映射
  7. mysql 表 字符集_如何查看MySQL数据库/表/列的字符集?
  8. C#解析HL7协议数据2.X
  9. linux常用命令全集sed,Linux常用命令之find详解
  10. Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址
  11. MultiDesk 是一个选项卡(TAB标签)方式的远程桌面连接 (Terminal Services Client)。
  12. GNURadio3.9.4创建OOT模块实例
  13. mk编译报错-提示找不到符号
  14. 米勒拉宾算法(素性测试)
  15. PS把图片切成九宫格
  16. BOC保护的氨基酸卟啉TAPP-Ala-BOC、TAPP-Phe-BOC、TAPP-Trp-BOC、Zn·TAPP-Ala-BOC、Zn·TAPP-Phe-BOC、Zn·TAPP-Trp-BOC齐岳
  17. 分享视频剪辑必备的三个素材软件(配音/文案/图片)
  18. 论文中可以让代码变得非常好看的工具
  19. css中浮动-----梅花
  20. Schnorr签名体制

热门文章

  1. MINA2-TCP服务端实例
  2. 一个月时间整理《深入浅出Node.js》
  3. PL/SQL Developer连接本地Oracle 11g 64位数据库
  4. 关于需求管理的胡思乱想---R3PR
  5. RTSP over UDP RTSP over TCP
  6. windows下安装emscripten
  7. Boost库实现线程池学习及线程实现的异步调用
  8. caffe学习(二):利用mnist数据集训练并进行手写数字识别(windows)
  9. 笔记3——C++类的一些特性
  10. 【机器学习入门笔记12:matplotlib绘图模块的使用】20190217