文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2.4 分门别类的管理:线程组
在一个系统中,如果线程数量很多,而且功能分配比较明确,就可以将相同功能的线程放置在一个线程组里。打个比方,如果你有一个苹果,你就可以把它拿在手里,但是如果你有十个苹果,你就最好还有一个篮子,否则不方便携带。对于多线程来说,也是这个道理。想要轻松处理几十个甚至上百个线程,最好还是将它们都装进对应的篮子里。
线程组的使用非常简单,如下:
01 public class ThreadGroupName implements Runnable { 02 public static void main(String[] args) { 03 ThreadGroup tg = new ThreadGroup("PrintGroup"); 04 Thread t1 = new Thread(tg, new ThreadGroupName(), "T1"); 05 Thread t2 = new Thread(tg, new ThreadGroupName(), "T2"); 06 t1.start(); 07 t2.start(); 08 System.out.println(tg.activeCount()); 09 tg.list(); 10 } 11 12 @Override 13 public void run() { 14 String groupAndName=Thread.currentThread().getThreadGroup().getName() 15 + "-" + Thread.currentThread().getName(); 16 while (true) { 17 System.out.println("I am " + groupAndName); 18 try { 19 Thread.sleep(3000); 20 } catch (InterruptedException e) { 21 e.printStackTrace(); 22 } 23 } 24 } 25 }
上述代码第3行,建立一个名为“PrintGroup”的线程组,并将T1和T2两个线程加入这个组中。第8、9两行,展示了线程组的两个重要的功能,activeCount()可以获得活动线程的总数,但由于线程是动态的,因此这个值只是一个估计值,无法确定精确,list()方法可以打印这个线程组中所有的线程信息,对调试有一定帮助。代码中第4、5两行创建了两个线程,使用Thread的构造函数,指定线程所属的线程组,将线程和线程组关联起来。
线程组还有一个值得注意的方法stop(),它会停止线程组中所有的线程。这看起来是一个很方便的功能,但是它会遇到和Thread.stop()相同的问题,因此使用时也需要格外谨慎。
此外,对于编码习惯,我还想再多说几句。强烈建议大家在创建线程和线程组的时候,给它们取一个好听的名字。对于计算机来说,也许名字并不重要,但是在系统出现问题时,你很有可能会导出系统内所有线程,你拿到的如果是一连串的Thread-0、Thread-1、Thread-2,我想你一定会抓狂。但取而代之,你看到的如果是类似HttpHandler、FTPService这样的名字,会让你心情倍爽。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论