Java多线程可以分组,还能这样玩!
前面的文章,栈长和大家分享过多线程创建的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多线程可以分组,还能这样玩!相关推荐
- Java多线课程,java多线程课程.doc
java多线程课程.doc 还剩 9页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 如下:线程 A:休眠 10s线程 B:休眠 20s线程 C: 休眠 ...
- java 线程分组_Java多线程可以分组,还能这样玩!
前面的文章,栈长和大家分享过多线程创建的3种方式<实现 Java 多线程的 3 种方式>. 但如果线程很多的情况下,你知道如何对它们进行分组吗? 和 Dubbo 的服务分组一样,Java ...
- Java 11 已发布,String 还能这样玩!
在文章<Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码>中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来 ...
- Java多线程开发系列之四:玩转多线程(线程的控制2)
在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...
- java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!
点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...
- call线程起名字_高级分享:Java多线程你真的理解透彻了吗?带你玩转一次多线程!...
不知道怎么引入正文 相信后端同学在开发的时候多多少少都会涉及到多线程开发,作为Java开发的我也同样会经常用到多线程开发. 我认为Java语言在处理多线程上是非常优秀的,我们可以使用简明的代码实现线程 ...
- Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信
前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...
- java复习系列[2] - Java多线程
文章目录 JUC thread 线程状态 sleep() 与 wait() 的异同点 wait() 与 阻塞 的异同点 Some Question !!! 有了**sleep()**为什么还要有**w ...
- 计算机是如何工作的,Java多线程编程
一.冯诺依曼体系 现代的计算机,大多遵守 冯诺依曼体系结构 (Von Neumann Architecture) CPU 中央处理器: 进行算术运算和逻辑判断. AMD Ryzen 7 580OU w ...
最新文章
- STM32 LCD中英文字符显示学习笔记
- Linux高并发应用类型对系统内核的优化
- java参数值注入_在springboot中使用注解将值注入参数的操作
- Data Pump failed with ORA-04031/ORA-4030?
- TOSCA自动化测试工具安装
- 浅析Hibernate映射(五)——集合映射
- mysql 表 字符集_如何查看MySQL数据库/表/列的字符集?
- C#解析HL7协议数据2.X
- linux常用命令全集sed,Linux常用命令之find详解
- Unity 3D 文件导入出错误解决方法以及unity圣典离线版下载地址
- MultiDesk 是一个选项卡(TAB标签)方式的远程桌面连接 (Terminal Services Client)。
- GNURadio3.9.4创建OOT模块实例
- mk编译报错-提示找不到符号
- 米勒拉宾算法(素性测试)
- PS把图片切成九宫格
- BOC保护的氨基酸卟啉TAPP-Ala-BOC、TAPP-Phe-BOC、TAPP-Trp-BOC、Zn·TAPP-Ala-BOC、Zn·TAPP-Phe-BOC、Zn·TAPP-Trp-BOC齐岳
- 分享视频剪辑必备的三个素材软件(配音/文案/图片)
- 论文中可以让代码变得非常好看的工具
- css中浮动-----梅花
- Schnorr签名体制