避免使用线程组(thread group)。

除了线程、锁和监视器之外,线程系统还提供了一个基本的抽象,即线程组。线程组的初衷是作为一种隔离applet(小程序)的机制,当然是出于安全的考虑。但是他们从来没有真正履行这个承诺,他们的安全价值已经差到根本不在Java安全模型的标准工作中提及的地步。

他们允许你同时把Thread的某些基本功能应用到一组线程中。其中有一些基本功能已经被废弃了,剩下的也很少使用。

具有讽刺意味的是,从线程安全性的角度来看,ThreadGroup API非常弱。为了得到一个线程组中的活动线程列表,你必须调用enumerate方法,它有一个数组参数,并且数组的容量必须足够大,以便容纳所有的活动线程。activeCount方法返回一个线程组中活动线程的数量,但是,一旦这个数组进行了分配,并传递给了enumerate方法,就不保证原先得到的活动线程数仍是正确的。如果线程数增加了,而数组太小,enumerate方法就会悄然的忽略掉无法再数组中容纳的线程。

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

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

你可能感兴趣的:(#,多线程的艺术)