Java并发编程随笔【九】中被丢弃的线程组ThreadGroup

线程组的初衷是作为一种隔离的机制,当然是出于安全的考虑。但是它们从来没有真正的履行这个承诺,它们的安全价值已经差到根本不在Java安全模型的标准工作中被提及的地步。

既然线程组并没有提供所提及的任何安全功能,那么它们到底提供了什么功能呢?不多,它们允许你同时把Thread的某些基本功能应用到一组线程上。其中有一些基本功能已经被废弃了,剩下的也很少使用。

具有讽刺意味的是,从线程安全性的角度来看,ThreadGroup API非常弱。为了得到一个线程组中的活动线程列表,你必须调用enumerate方法,它有一个数组参数,并且数组的容量必须足够大,以便容纳所有的活动线程。

        ThreadGroup group = new ThreadGroup("test");
        group.enumerate(thread);

activeCount方法返回一个线程组中活动线程的数量,但是,一旦这个数组进行了分配,并传递给了enumeration方法,就不保证原先得到的活动线程数仍是正确的。如果线程数增加了,而数组太小,enumerate方法就会悄然地忽略掉无法在数组中容纳的线程。

        group.activeCount();

列出线程组中子组的API也有类似的缺陷。虽然通过增加新的方法,这些问题都是可以得到修正,但是,它们目前还没有被修正,因为线程组已经过时,所以实际上根本没有必要修正。

总而言之,线程组并没有提供太多的有用功能,而且它们提供的很多方法都有缺陷。所以我就完全没有必要花费很多时间去了解他,可以使用线程池来替代它。

猜你喜欢

转载自blog.csdn.net/yaomingyang/article/details/80202686