第七十三条 避免使用线程组

除了线程、锁、监视器外,系统还提供了一个基本的抽象,即线程组。线程组的目的是作为一种隔离的机制,但实际上却没达到这个目的。因为线程组 ThreadGroup 表示一组线程的集合,一旦这个线程归属到一个线程组之中后,这个线程就不能再更换其所在的线程组。这种就是把一条线程卡死在一个线程组中了,并非是隔离。但线程组有个好处:线程组可以进行复制,统一进行异常处理设置等。但是从线程安全性的角度来看,ThreadGroup API非常弱。为了得到一个线程组中的活动线程列表,你必须调用enumerate方法,以便容纳线程。但如果线程增加过快而线程组比较小,enumerate方法就会悄然的忽略掉无法再数组中容纳的线程。后期Java为什么没对它进行修复和优化,是因为线程组已经过时了,没必要修正了。系统提供了线程池的概念来实现我们所需要的功能,用线程池代替线程组,这是一个很好的选择。

总而言之,线程组并没有提供太多有用的功能,而且他们提供的许多功能还是有缺陷的。我们最好把线程组看做是一个不成功的试验,你可以忽略掉他们。如果你正在设计的一个类需要处理线程的逻辑组,或许就应该使用线程池executor。

猜你喜欢

转载自blog.csdn.net/Deaht_Huimie/article/details/85013810