java的线程组 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-25
同样可以看出,提高最大优先级的企图是失败的。我们只能降低一个线程组的最大优先级,而不能提高它。此外,注意线程A的优先级并未改变,而且它现在高于线程组的最大优先级。也就是说,线程组最大优先级的变化并不能对现有线程造成影响。第五个练习试着将一个新线程设为最大优先级。如下所示:(4) ThreadGroup[name=g1,maxpri=8] Thread[A,9,g1] 因此,新线程不能变到比最大线程组优先级还要高的一级。这个程序的默认线程优先级是6;若新建一个线程,那就是它的默认优先级,而且不会发生变化,除非对优先级进行了特别的处理。练习六将把线程组的最大优先级降至默认线程优先级以下,看看在这种情况下新建一个线程会发生什么事情:(5) ThreadGroup[name=g1,maxpri=8] Thread[A,9,g1] Thread[B,8,g1] 尽管线程组现在的最大优先级是3,但仍然用默认优先级6来创建新线程。所以,线程组的最大优先级不会影响默认优先级(事实上,似乎没有办法可以设置新线程的默认优先级)。改变了优先级后,接下来试试将其降低一级,结果如下:(6) ThreadGroup[name=g1,maxpri=3] Thread[A,9,g1] Thread[B,8,g1] Thread[C,6,g1] 因此,只有在试图改变优先级的时候,才会强迫遵守线程组最大优先级的限制。我们在(8)和(9)中进行了类似的试验。在这里,我们创建了一个新的线程组,名为g2,将其作为g1的一个子组,并改变了它的最大优先级。大家可以看到,g2的优先级无论如何都不可能高于g1:(7) ThreadGroup[name=g1,maxpri=3] Thread[A,9,g1] Thread[B,8,g1] Thread[C,3,g1] 也要注意在g2创建的时候,它会被自动设为g1的线程组最大优先级。经过所有这些实验以后,整个线程组和线程系统都会被打印出来,如下所示:(8) ThreadGroup[name=g2,maxpri=3] (9) ThreadGroup[name=g2,maxpri=3] 所以由线程组的规则所限,一个子组的最大优先级在任何时候都只能低于或等于它的父组的最大优先级。本程序的最后一个部分演示了用于整组线程的方法。程序首先遍历整个线程树,并启动每一个尚未启动的线程。例如,system组随后会被挂起(暂停),最后被中止(尽管用suspend()和stop()对整个线程组进行操作看起来似乎很有趣,但应注意这些方法在Java 1.2里都是被“反对”的)。但在挂起system组的同时,也挂起了main线程,而且整个程序都会关闭。所以永远不会达到让线程中止的那一步。实际上,假如真的中止了main线程,它会“掷”出一个ThreadDeath违例,所以我们通常不这样做。由于ThreadGroup是从Object继承的,其中包含了wait()方法,所以也能调用wait(秒数×1000),令程序暂停运行任意秒数的时间。当然,事前必须在一个同步块里取得对象锁。ThreadGroup类也提供了suspend()和resume()方法,所以能中止和启动整个线程组和它的所有线程,也能中止和启动它的子组,所有这些只需一个命令即可(再次提醒,suspend()和resume()都是Java 1.2所“反对”的)。从表面看,线程组似乎有些让人摸不着头脑,但请注意我们很少需要直接使用它们。(10)ThreadGroup[name=system,maxpri=9] Thread[main,6,system] ThreadGroup[name=g1,maxpri=3] Thread[A,9,g1] Thread[B,8,g1] Thread[C,3,g1] ThreadGroup[name=g2,maxpri=3] Thread[0,6,g2] Thread[1,6,g2] Thread[2,6,g2] Thread[3,6,g2] Thread[4,6,g2] |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: java的表格 - 编程入门网下一篇: java制作多个线程 - 编程入门网
关于java的线程组 - 编程入门网的所有评论