[疯狂Java]多线程:线程组、线程/组内异常处理

1. 线程组:

    1) ThreadGroup类,Java用来批量管理线程的集合单位;

    2) 线程组的3大性质:

         i. 每个线程必须要有一个所属的线程组,可以再创建线城时指定(重载版本的构造器),如果没有指定则分配到默认线程组(父线程所在的线程组);

         ii. 线程所属的线程组一旦确定就不能再改变,Java并没有提供修改线程组的方法;

         iii. 每个线程组必须要有一个名称,而且必须由开发人员指定(构造器中指定),名称一旦确定就不得再修改(没有支持修改的方法);

    3) 线程组构造器:

         i. ThreadGroup(String name); // 指定线程组的名称

         ii. ThreadGroup(ThreadGroup parent, String name); // 指定父线程组,以及该线程组的名称

!线程组可以拥有父线程组,这使得线程组可以分级管理;

    4) 创建线城时指定所属线程组:第一个参数都是线程组

         i. Thread(ThreadGroup group, Runnable target);

         ii. Thread(ThreadGroup group, Runnable target, String name);

         iii. Thread(ThreadGroup group, String name);

    5) 获得线程组的名称:String ThreadGroup.getName();

    6) 获得一个线程所属的线程组:ThreadGroup Thread.getThreadGroup();

    7) ThreadGroup提供的控制组内线程的常用方法:

         i. int activeCount(); // 返回当前组中处于活动状态的线程数量(就绪、运行、阻塞);

         ii. void interrupt(); // 中断组内的所有线程

         iii. boolean isDaemon(); // 判断该线程组是否是后台线程组

         iv. void setDaemon(boolean daemon); // 将线程组设置成后台线程组(true),后台线程组的特点是组内最后一个线程死亡后线程组自动死亡

         v. void setMaxPriority(int pri); // 设置组内线程的最大优先级,如果在调用之前组内有些线程的优先级比pri大那么这些线程将不受影响,设置之后里面的线程无论怎么设置,优先级都不会大于pri了

    8) 测试:

public class Test {

	public static void main(String[] args) {
		ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
		System.out.println("Main thread group: " + mainGroup.getName());
		System.out.println("Main thread group is " + (mainGroup.isDaemon()? "": "not ") + "daemon group");
		
		ThreadGroup tg = new ThreadGroup("New Daemon Thread Group");
		tg.setDaemon(true);
		Thread t = new Thread(tg, () -> {
			for (int i = 0; i < 10; i++) {
				System.out.println(Thread.currentThread().getName() + " i = " + i);
			}
		}, "New Thread");
		t.start();
		System.out.println(t.getName() + "'s group is " + t.getThreadGroup().getName());
	}
}
!可以看到main方法主线程的线程组名也是main,并且不是后台线程;


2. 线程/组内异常处理:

    1) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值