前面的文章,栈长和大家分享过多线程创建的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()

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

/**

* 微信公众号:Java技术栈

*/

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技术栈(id:javastack),关注公众号在后台回复 “java” 可获取更多,转载请原样保留本信息。

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

  1. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  2. java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...

    线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...

  3. java线程基础_Java多线程基础

    前言 在我们工作和学习的过程中,Java线程我们或多或少的都会用到,但是在使用的过程上并不是很顺利,会遇到各种各样的坑,这里我通过讲解Thread类中的核心方法,以求重点掌握以下关键技术点: 线程的启 ...

  4. java线程入门_java多线程快速入门(一)

    1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集 ...

  5. java线程 锁_Java多线程(二) 多线程的锁机制

    当两条线程同时访问一个类的时候,可能会带来一些问题.并发线程重入可能会带来内存泄漏.程序不可控等等.不管是线程间的通讯还是线程共享数据都需要使用Java的锁机制控制并发代码产生的问题.本篇总结主要著名 ...

  6. java线程设计模式_JAVA多线程设计模式

    漫谈UML UML 类图 类和层次结构的关系 接口与实现 聚合 访问控制 类间的关联性 顺序图 处理流程和对象间的协调 时序图 Introduction 1 Java语言的线程 Java语言的线程 何 ...

  7. java线程栅栏_Java 多线程基础 - CyclicBarrier

    我的博客 转载请注明原创出处. 序 java.util.concurrent包里有几个能帮助人们管理相互合作的线程集的类,为多线程常见的应用场景预置了抽象好的类库.在遇到这些应用场景时应该直接重用合适 ...

  8. java线程 stop()_java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())...

    JAVA中有3种方式可以终止正在运行的线程 ①线程正常退出,即run()方法执行完毕了 ②使用Thread类中的stop()方法强行终止线程.但stop()方法已经过期了,不推荐使用 ③使用中断机制i ...

  9. java 线程 组成_java多线程

    一:基本知识点 1.1线程与进程区别: 1.进程是资源分配的最小单位,线程是CPU调度的最小单位 2.一个进程由一个或多个线程组成 3.进程之间相互独立,每个进程都有独立的代码和数据空间,但同一进程下 ...

最新文章

  1. pandas读取大文件(chunksize)并通过sqlalchemy写入MySQL数据库
  2. #define barrier() __asm__ __volatile__(: : :memory) 中的memory是gcc的东西
  3. ubuntu16.04 + cuda8.0安装
  4. Matlab 2015a 中 pointCloud类相关知识
  5. 利用OpenCvSharp处理图片并在winformd的pictureBox中显示
  6. 怎么隐藏滚动条又能滚动
  7. 引用 看图英语作文万能模板
  8. vue axios解决post传参数问题
  9. 虚拟机CentOS7开机报错:you might must to save “/run/initramfs/rdsosreport.txt“ to a USB stick or /boot
  10. 优化Oracle网络设置的方案
  11. matlab水蒸气焓值计算_焓变 反应热-化学选修4同步优质系列教案(人教版)
  12. 机器学习--文本分析(jieba)
  13. 从音箱入门到高手必看知识
  14. 首发丨极课大数据完成1亿元B轮融资,用AI提升学生作业、考试管理效率
  15. 基于SpringBoot的库存管理系统
  16. html左右滚动div隐藏部分div,只让DIV出现横向滚动条,窗口不要有滚动条
  17. okdownload下载mp4视频文件
  18. backface-visibility
  19. 日语N5级别所有一类动词原形
  20. 有输入和输出的c语言大作业题目,C语言大作业题目2011.pdf

热门文章

  1. 软件测试项目时间一般多少钱,项目的时间进度该如何估算?
  2. mysql新增阵列df_DF学Mysql(三)——索引操作
  3. macos降级_iOS12.3 beta2更新了什么 iOS12.3测试版2新特性与升降级方法
  4. mongodb 输出数组字段_MongoDb文档操作、索引操作
  5. vue 怎么全局到入常量_Vue 中如何定义全局的变量和常量(转)
  6. c++ file* 句柄泄漏_C++核心指南:P.8 勿泄漏任务资源
  7. oracle常用表查询,ORACLE EBS常用表及查询语句(最终整理版)
  8. 【数学】Element Swapping
  9. 初学Linux第三周
  10. Gradle学习之构建java与web项目