| 在Java中每个线程都属于某个“线程群组”(ThreadGroup)管理的一员,例如若您是在main ()主工作流程中产生一个线程,则产生的线程属于main这个线程群组管理的一员,您可以使用下面的指令来取得目前线程所属的线程群组名称:: Thread.currentThread().getThreadGroup().getName();
每一个线程产生时,都会被归入某个线程群组,这视您的线程是在哪个群组中产生,如果没有指定,则归入产生该子线程的线程群组中,您也可以自行指定线程群组,线程一但归入某个群组,就无法更换群组。 ThreadGroup正如其名,可以统一管理整个群组中的线程,您可以使用以下的方式来产生群组,并在产生线程的时候,一并指定其群组: ThreadGroup threadGroup1 = new ThreadGroup("group1");
ThreadGroup threadGroup2 = new ThreadGroup("group2"); Thread thread1 = new Thread(threadGroup1, "group1's member"); Thread thread2 = new Thread(threadGroup2, "group2's member"); ThreadGroup中的某些方法,可以对所有的线程产生作用,例如interrupt()可以interrupt群组中所有的线程, setMaxPriority()可以设定群组中线程所能拥有的最大优先权(本来就拥有更高优先权的线程不受影响),这方面您可以查询线上API文件 来了解有哪些方法可以使用。 如果我们想要一次取得群组中所有的线程进行操作,您可以使用enumerate()方法,例如: Thread[] threads = new Thread[threadGroup1.activeCount()];
threadGroup1.enumerate(threads); activeCount()方法取得群组中作用中的线程数量,enumerate()方法要传入一个Thread数组对象,它会将线程对象设定至每个数组栏位中,之后您就可以指定数组索引来操作这些线程。 ThreadGroup中有个uncaughtException()方法,这是当群组中某个线程发生unchecked异常时,由执行环境调用此方法进行处理,如果有必要,您可以覆盖此方法,一个例子如下:
package onlyfun.caterpillar; 在uncaughtException()方法的参数中,第一个参数可以取得发生异常的线程实例,而第二个参数可以取得异常对象,范例中显示了线程的名称及异常讯息,结果如下所示:
|