返回介绍

2.4 分门别类的管理:线程组

发布于 2024-08-21 22:20:21 字数 1504 浏览 0 评论 0 收藏 0

在一个系统中,如果线程数量很多,而且功能分配比较明确,就可以将相同功能的线程放置在一个线程组里。打个比方,如果你有一个苹果,你就可以把它拿在手里,但是如果你有十个苹果,你就最好还有一个篮子,否则不方便携带。对于多线程来说,也是这个道理。想要轻松处理几十个甚至上百个线程,最好还是将它们都装进对应的篮子里。

线程组的使用非常简单,如下:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文