java ThreadGroup线程分组

是什么?为什么?怎么做?

 

一、是什么

线程组(ThreadGroup)就是由线程组成的管理线程的类,这个类是java.lang.ThreadGroup类。

二、为什么

有时候往往会存在一些线程做同样的任务,如果想对其进行统一管理,那么就可以把这些线程设置成同一个线程组。在线程组内,无论多少线程还在运行,他们的状态可以被一个call中断。

我个人认为:把任务相同的线程划分为同一线程组,可以更好地区分各个线程模块所负责的功能,并且提供管理。比如说我要完成一个功能,可能需要开10条线程,如果其中一条线程完成了任务(线程结束了),那么我需要停止剩下的9条线程。在这种场景下,如果不使用线程组,我可能需要把剩下的线程逐一停止。但是如果有线程组,我可以直接命令整个线程组停止工作,这样就直接把剩下的线程都停了。

三、怎么做

设计一个需求,现存在三条线程,我想让这三条线程交替执行,直到num=0为止,代码大概是这样:

这三条线程的任务都是一样的,所以可以将其设置为同一线程组:

这里设置了一个线程组:

如果要interrupt所有线程,不需要逐个interrupt,对整个线程组interrupt就好了。

如果某一条线程结束了,那么说明num已经为0了,那么我想要interrupt其他线程,让他们提前结束(这个情景应该挺多的)。可以这样实现:

一旦threadGroup.activeCount() < 3,那就是说当前线程组中已经有一条线程完成任务了,那么我可以interrupt整个线程组,停止剩下的任务。

(其实这个功能可以这样实现:把所有线程放到数组中,while循环检测所有线程是否alive,如果有线程结束了,那么interrupt整个数组中的线程)

除此之外,线程组还有一些功能可以发掘,这里就不深入了。

四、总结

线程组方便了我们对执行相同任务的线程的管理。一些情景中可以尝试使用。

发表评论

电子邮件地址不会被公开。 必填项已用*标注