当前位置:网站首页>ThreadGroup ThreadGroup implémente l'interface threadfactory en utilisant la classe Introduction + Custom thread Factory
ThreadGroup ThreadGroup implémente l'interface threadfactory en utilisant la classe Introduction + Custom thread Factory
2022-04-23 14:13:00 【Purluckyfish】
Un.、ThreadGroupIntroduction à la classe
Le Groupe thread est unStructure arborescente ,ThreadGroupLa classe a quelques façons de supprimer ou d'ajouter pour maintenir cet arbre,Il existe également des méthodes pour interroger l'état des noeuds d'arbre et les relations hiérarchiques;Du Groupe threadContrôle des droitsEtlinuxLe Groupe principal du genre est similaire à:Un thread n'est autorisé à accéder qu'à des informations sur son propre groupe de Threads,Mais l'accès aux informations du Groupe parent ou de tout autre groupe de thread du Groupe de thread dans lequel il réside n'est pas autorisé.
Exemple de code:
package com.yu;
public class ThreadGroupTest {
public static void main(String[] args) throws Exception {
ThreadGroup tg_parent = new ThreadGroup(" Groupe de thread parent ");
ThreadGroup tg_son = new ThreadGroup(tg_parent, " Sous - groupes de fils ");
Thread t1 = new Thread(tg_son, () -> {
System.out.println("Nom du thread:" + Thread.currentThread().getName());
System.out.println("Nom du Groupe de thread:" + Thread.currentThread().getThreadGroup().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "t1Thread");
Thread t2 = new Thread(tg_parent, () -> {
System.out.println("Nom du thread:" + Thread.currentThread().getName());
System.out.println("Nom du Groupe de thread:" + Thread.currentThread().getThreadGroup().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "t2Thread");
Thread t3 = new Thread(tg_parent, () -> {
System.out.println("Nom du thread:" + Thread.currentThread().getName());
System.out.println("Nom du Groupe de thread:" + Thread.currentThread().getThreadGroup().getName());
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "t2Thread");
System.out.println("Nom du Groupe de thread:"+t1.getThreadGroup().getName());
System.out.println(" Si le thread est dans un groupe de Threads donné :"+t1.getThreadGroup().parentOf(tg_parent));
System.out.println(" Si le thread est dans un groupe de Threads donné :"+t1.getThreadGroup().parentOf(tg_son));
System.out.println(" Nombre de Threads actifs dans le Groupe de Threads :"+tg_parent.activeCount());// C'est une évaluation
System.out.println(" Nombre de groupes de Threads actifs dans un groupe de Threads :"+tg_parent.activeGroupCount());// C'est une évaluation
System.out.println(" Priorité maximale du Groupe thread :"+t1.getThreadGroup().getMaxPriority());
}
}
Utiliser le scénario: 1 Grande tâche , Il peut être divisé en plusieurs sous - fils indépendants en parallèle , Tant que l'un des sous - fils remplit les conditions de la tâche , Même si la tâche est terminée ,Appelé threadGroup.interrupt() Méthodes D'autres sous - fils peuvent s'arrêter ;2 Grande tâche , Il peut être divisé en plusieurs sous - fils indépendants en parallèle , Enfin, attendez la fin de l'exécution de tous les sous - threads et continuez .
2.、ThreadFactoryIntroduction à l'interface
ThreadFactoryEst une interface,Un seulThread newThread(Runnable r) Méthodes;
La classe d'implémentation d'usine de Threads personnalisés produit des Threads selon certaines règles comme une ligne de montage d'usine ,Ces fils “ Ils ressemblent tous à ” ;
Personnaliser la classe d'implémentation de thread Factory , Vous pouvez suivre exactement quand et combien de Threads un pool de Threads a été créé , Vous pouvez également personnaliser le nom du thread ,Groupe,Priorité, Même définir directement tous les Threads comme des Threads gardiens . Vous pouvez définir l'état de tous les Threads dans le pool plus librement en personnalisant le pool de Threads .
Exemple de code:
package com.yu;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public class ThreadFactoryTest {
public static void main(String[] args) throws Exception {
// Usine de thread personnalisée
ThreadFactory threadFactoryOwner = new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setName("threadFactoryOwner-pool-" + t.getId());
t.setDaemon(true);// Définir comme démon
return t;
}
};
// Créer un pool de Threads en utilisant une usine personnalisée
ExecutorService executorService = Executors.newFixedThreadPool(10, threadFactoryOwner);
for (int i = 0; i < 10; i++) {
executorService.submit(() -> {
System.out.println("Nom du thread:" + Thread.currentThread().getName());
System.out.println(" Groupes de thread :" + Thread.currentThread().getThreadGroup());
System.out.println("ThreadID:" + Thread.currentThread().getId());
System.out.println("==========================================");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
Thread.sleep(2000);
}
}
}
JDK Classe d'implémentation par défaut de thread Factory : Spécifie la classe d'implémentation de thread Factory lors de la création d'un pool de Threads , Si non spécifié, utiliser JDKUsine de thread par défaut.

Trois、Le lien entre les deux
Vous pouvez utiliser le Groupe de thread spécifié lors de la personnalisation d'une classe d'implémentation d'usine de thread .
版权声明
本文为[Purluckyfish]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231406486413.html
边栏推荐
猜你喜欢
RobotFramework 之 文件上传和下载
Call wechat customer service applet
How QT designer adds resource files
HyperMotion云迁移助力中国联通,青云完成某央企上云项目,加速该集团核心业务系统上云进程
连接公司跳板机取别名
RobotFramework 之 项目框架
MySQL数据库讲解(十)
多云数据流转?云上容灾?年前最后的价值内容分享
On the multi-level certificate based on OpenSSL, the issuance and management of multi-level Ca, and two-way authentication
Some good articles on pthread multithreading
随机推荐
百度图片识别自定义实现(替代AipOcr)
预览CSV文件
快速搞懂线程实现的三种方式
Three point positioning based on ibeacons (wechat applet)
Research on recyclerview details - Discussion and repair of recyclerview click dislocation
ActiveMq基础知识
政务云迁移实践 北明数科使用HyperMotion云迁移产品为某政府单位实施上云迁移项目,15天内完成近百套主机迁移
Algorithem_ReverseLinkedList
Jira截取全图
redis数据库讲解(三)redis数据类型
Idea控制台乱码解决
线程间控制之Semaphore使用介绍
RecyclerView高级使用(一)-侧滑删除的简单实现
困扰多年的系统调研问题有自动化采集工具了,还是开源免费的
帆软中需要设置合计值为0时,一整行都不显示的解决办法
mysql 5.1升级到5.67
gzip和gunzip 解压参数详解
关于密匙传递的安全性和数字签名
VMware installation 64 bit XP Chinese tutorial
关于Jmeter启动闪退问题