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

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

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

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

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

9061041.jpg

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

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

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

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

38415499.jpg

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

// 获取当前线程组内的运行线程数

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” 可获取更多,转载请原样保留本信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 6 安装zabbix 3.0

1.安装PHP Zabbix 3.0对PHP的要求最低为5.4,而CentOS6默认为5.3.3,完全不满足要求,故需要利用第三方源,将PHP升级到5.4以上,注意,不支持PHP7 rpm -ivh http://repo.webtatic.com/yum/el6/latest.rpm yum in…

java 共享锁 独占锁_java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁...

一、公平锁与非公平锁1.1 概述公平锁:是指多个线程按照申请锁的顺序来获取锁。非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情况下,有可能造成…

GoogleNet网络分析与demo实例

参考自 up主的b站链接:霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频这位大佬的博客 Fun_机器学习,pytorch图像分类,工具箱-CSDN博客 1. GoogLeNet网络详解 GoogLeNet在2014年由Google团队提出(与VGG网络同年,注意GoogLeNet中的L大…

51服务的开启方式

服务开启方式的知识点见博文:http://blog.csdn.net/zengmingen/article/details/49425161步骤: 1、新建Android项目名“51服务的开启方式” 2、新建一个类 MyService,继承 Service 3、在清单文件里配置第二步建的service 4、在Myservice类中覆…

JavaWeb应用配置文件安全解决方案

这里主要说说JavaWeb应用的配置文件安全,通常JavaWeb应用多多少少会有一些配置文件,其中数据源的配置则是关系到数据库的安全,另外还有一些基于文件的权限配置,应用程序的一些系统参数。鉴于这样的情况,如果配置文件被…

hive2 java连接_用Java代码通过JDBC连接Hiveserver2

1.在终端启动hiveserver2#hiveserver22.使用beeline连接hive另外打开一个终端,输入如下命令(xavierdb必须是已经存在的数据库)#beeline -u jdbc:hive2://localhost:10000/xavierdb -n hive -p hive3.添加maven依赖org.apache.hivehive-jdbc1.1.0junitjunit4.9org.ap…

JAVA通过SSL证书创建MS AD账户及设置密码

近期由于工作需要整理一下自动化的东西,因为公司去年上线了OA,所以公司的入职系统会提交用户的信息到IT部门,最早的做法是入职到了,IT部门收集用户信息在AD中创建对应的用户信息,所以为了提高管理员的工作效率&#xf…

01电话拨号器

实例非常简单,意在体验Android的Intent,用户权限。 Intent 见 http://blog.csdn.net/zengmingen/article/details/49586045 用户权限 见 http://blog.csdn.net/zengmingen/article/details/49586569 --------------------------------------------------…

02发送短信

使用SmsManager发送短信java.lang.Object ↳android.telephony.SmsManagerManages SMS operations such as sending data, text, and pdu SMS messages. Get this object by calling the static method SmsManager.getDefault().管理短信操作,如发送数据&#xff…

Java应用一般架构

原文链接:http://www.iteye.com/news/31115 当我们架设一个系统的时候通常需要考虑到如何与其他系统交互,所以我们首先需要知道各种系统之间是如何交互的,使用何种技术实现。 1. 不同系统不同语言之间的交互 现在我们常见的不同系统不同语…

Mac MongoDB未正常关闭导致重启失败

你可以删除掉mongod.lock文件,然后重新启动,如果还是不可以,你可以查看一下进程,然后杀掉: ps -aef | grep mongo sudo kill 1076 再重启数据库即可。

powerdns与nginx结合实现以域名和IP方式访问web服务器80端口时分别跳转到不同页面...

1.powerdns设置 2.内部网站介绍 web服务器采用nginx,内网dns采用powerdns. 想实现的功能如下 通过ip访问时跳转到A页面,通过域名访问时,让其跳转到B页面。两种方式的端口均为80. 页面A对应的nginx配置 server { listen 80; …

java代码块是对象吗_面向对象(Java中普通代码块,构造代码块,静态代码块区别及代码示例)...

//静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。//如果类中包含多个静态代码块,那么将按照&quo…

Android app 应用签名

为什么要签名? 这个要从Android的系统设计来解释。 ---Android系统中的每个应用都是一个用户,应用的包名(清单文件中 package的值)就是用户名。 当一个已安装的应用A和一个正要安装的应用B,它们的包名相同&#xff…

[.Net线程处理系列]专题五:线程同步——事件构造

引言: 其实这部分内容应该是属于专题四,因为这篇也是讲关于线程同步的,但是由于考虑到用户的阅读习惯问题,因为文章太长了,很多人不是很愿意看包括我也是这样的,同时也有和我说可以把代码弄成折叠的&#x…

闪屏页面(Splash)开发

业余作品--365安全卫士 ------------------------------------------- 闪屏页面(Splash):app刚启动时的页面 作用: 1、展示公司品牌logo 2、应用初始化。如游戏app第一次启动初始化数据 3、检测新版本。 4、检测程序合法性。如 招商银行app在启动…

matlab2016b ubuntu命令行安装 + matconvnet的安装

0. 下载安装包 下载的文件有Matlab 2016b Linux64 Crack.rar,R2016b_glnxa64_dvd2.iso,R2016b_glnxa64_dvd1.iso。 1. 拷贝安装文件并上传服务器 在Windows下用虚拟光驱打开,并将R2016b_glnxa64_dvd1.iso和R2016b_glnxa64_dvd2.iso所有内容复…

java 责任链模式 链表_责任链模式的实现及源码中应用

01—责任链模式的实现假设一个出差任务的流程需要审批出差行程和出差报销金额。那么,对应两个部门的审核。我们先定义一个出差任务Task类:然后,我们定义一个抽象的处理类Handler,其中具体的处理方法Handle交给子类去实现。然后&am…

php setcookie 过期,php cookie怎么设置过期时间?

PHP中可以使用setcookie()函数设置cookie的过期时间。语法为“setcookie(name,value,expire,path,domain,secure)”;其中expire参数用于指定cookie的有效期,即过期时间戳。setcookie() 函数向客户端发送一个 HTTP cookie。cookie 是由服务器发送到浏览器…

jQuery Mobile动态刷新页面样式

见 百度经验 http://jingyan.baidu.com/article/7f766dafbc18f24101e1d014.html JQM里面当我们更新了某些页面标签(如: listview, radiobuttons, checkboxes, select menus)里的数据时,必须做refresh操作. 为什么必须做refresh操作操作呢?因为JQM在做页面渲染的时候,为了使样…