Java多线程可以分组,还能这样玩!

简介: 前面的文章,栈长和大家分享过多线程创建的3种方式《实现 Java 多线程的 3 种方式》。但如果线程很多的情况下,你知道如何对它们进行分组吗?

前面的文章,栈长和大家分享过多线程创建的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 方法一样会带来很多问题,所以它们两个现在都已经被废弃了,官方也是不建议使用了,建议使用线程中断功能进行优雅终止线程。


相关文章
|
7天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
21 2
|
11天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
10天前
|
Java Go PHP
Java分组匹配
Java分组匹配
18 5
|
12天前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。
|
8天前
|
Java 调度
Java-Thread多线程的使用
这篇文章介绍了Java中Thread类多线程的创建、使用、生命周期、状态以及线程同步和死锁的概念和处理方法。
Java-Thread多线程的使用
|
14天前
|
Java 程序员
Java中的多线程基础与实践
【9月更文挑战第21天】本文旨在引导读者深入理解Java多线程的核心概念,通过生动的比喻和实例,揭示线程创建、同步机制以及常见并发工具类的使用。文章将带领读者从理论到实践,逐步掌握如何在Java中高效地运用多线程技术。
|
11天前
|
Java 调度 开发者
Java中的多线程编程:从基础到实践
本文旨在深入探讨Java多线程编程的核心概念和实际应用,通过浅显易懂的语言解释多线程的基本原理,并结合实例展示如何在Java中创建、控制和管理线程。我们将从简单的线程创建开始,逐步深入到线程同步、通信以及死锁问题的解决方案,最终通过具体的代码示例来加深理解。无论您是Java初学者还是希望提升多线程编程技能的开发者,本文都将为您提供有价值的见解和实用的技巧。
15 2
|
13天前
|
Java 数据处理
Java中的多线程编程:从基础到实践
本文旨在深入探讨Java中的多线程编程,涵盖其基本概念、创建方法、同步机制及实际应用。通过对多线程基础知识的介绍和具体示例的演示,希望帮助读者更好地理解和应用Java多线程编程,提高程序的效率和性能。
19 1
|
6天前
|
Java 数据中心 微服务
Java高级知识:线程池隔离与信号量隔离的实战应用
在Java并发编程中,线程池隔离与信号量隔离是两种常用的资源隔离技术,它们在提高系统稳定性、防止系统过载方面发挥着重要作用。
6 0
|
8天前
|
Java 数据处理 调度
Java中的多线程编程:从基础到实践
本文深入探讨了Java中多线程编程的基本概念、实现方式及其在实际项目中的应用。首先,我们将了解什么是线程以及为何需要多线程编程。接着,文章将详细介绍如何在Java中创建和管理线程,包括继承Thread类、实现Runnable接口以及使用Executor框架等方法。此外,我们还将讨论线程同步和通信的问题,如互斥锁、信号量、条件变量等。最后,通过具体的示例展示了如何在实际项目中有效地利用多线程提高程序的性能和响应能力。
下一篇
无影云桌面