java 线程分组_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()
我们来简单使用下线程组吧!
/**
* 微信公众号: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多线程可以分组,还能这样玩!相关推荐
- java线程钥匙_Java多线程并发编程/锁的理解
一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...
- java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...
线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...
- java线程基础_Java多线程基础
前言 在我们工作和学习的过程中,Java线程我们或多或少的都会用到,但是在使用的过程上并不是很顺利,会遇到各种各样的坑,这里我通过讲解Thread类中的核心方法,以求重点掌握以下关键技术点: 线程的启 ...
- java线程入门_java多线程快速入门(一)
1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集 ...
- java线程 锁_Java多线程(二) 多线程的锁机制
当两条线程同时访问一个类的时候,可能会带来一些问题.并发线程重入可能会带来内存泄漏.程序不可控等等.不管是线程间的通讯还是线程共享数据都需要使用Java的锁机制控制并发代码产生的问题.本篇总结主要著名 ...
- java线程设计模式_JAVA多线程设计模式
漫谈UML UML 类图 类和层次结构的关系 接口与实现 聚合 访问控制 类间的关联性 顺序图 处理流程和对象间的协调 时序图 Introduction 1 Java语言的线程 Java语言的线程 何 ...
- java线程栅栏_Java 多线程基础 - CyclicBarrier
我的博客 转载请注明原创出处. 序 java.util.concurrent包里有几个能帮助人们管理相互合作的线程集的类,为多线程常见的应用场景预置了抽象好的类库.在遇到这些应用场景时应该直接重用合适 ...
- java线程 stop()_java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())...
JAVA中有3种方式可以终止正在运行的线程 ①线程正常退出,即run()方法执行完毕了 ②使用Thread类中的stop()方法强行终止线程.但stop()方法已经过期了,不推荐使用 ③使用中断机制i ...
- java 线程 组成_java多线程
一:基本知识点 1.1线程与进程区别: 1.进程是资源分配的最小单位,线程是CPU调度的最小单位 2.一个进程由一个或多个线程组成 3.进程之间相互独立,每个进程都有独立的代码和数据空间,但同一进程下 ...
最新文章
- pandas读取大文件(chunksize)并通过sqlalchemy写入MySQL数据库
- #define barrier() __asm__ __volatile__(: : :memory) 中的memory是gcc的东西
- ubuntu16.04 + cuda8.0安装
- Matlab 2015a 中 pointCloud类相关知识
- 利用OpenCvSharp处理图片并在winformd的pictureBox中显示
- 怎么隐藏滚动条又能滚动
- 引用 看图英语作文万能模板
- vue axios解决post传参数问题
- 虚拟机CentOS7开机报错:you might must to save “/run/initramfs/rdsosreport.txt“ to a USB stick or /boot
- 优化Oracle网络设置的方案
- matlab水蒸气焓值计算_焓变 反应热-化学选修4同步优质系列教案(人教版)
- 机器学习--文本分析(jieba)
- 从音箱入门到高手必看知识
- 首发丨极课大数据完成1亿元B轮融资,用AI提升学生作业、考试管理效率
- 基于SpringBoot的库存管理系统
- html左右滚动div隐藏部分div,只让DIV出现横向滚动条,窗口不要有滚动条
- okdownload下载mp4视频文件
- backface-visibility
- 日语N5级别所有一类动词原形
- 有输入和输出的c语言大作业题目,C语言大作业题目2011.pdf
热门文章
- 软件测试项目时间一般多少钱,项目的时间进度该如何估算?
- mysql新增阵列df_DF学Mysql(三)——索引操作
- macos降级_iOS12.3 beta2更新了什么 iOS12.3测试版2新特性与升降级方法
- mongodb 输出数组字段_MongoDb文档操作、索引操作
- vue 怎么全局到入常量_Vue 中如何定义全局的变量和常量(转)
- c++ file* 句柄泄漏_C++核心指南:P.8 勿泄漏任务资源
- oracle常用表查询,ORACLE EBS常用表及查询语句(最终整理版)
- 【数学】Element Swapping
- 初学Linux第三周
- Gradle学习之构建java与web项目