多线程系列四之Thread类用法

本文详细介绍了JavaThread类的构造方法、get方法(包括getId、getName和getState)、isDemo与setDemo的用法,以及线程终止的两种方式:通过标志位控制和Thread类自带的中断机制。特别强调了守护线程和前台线程的区别以及如何响应中断请求。
摘要由CSDN通过智能技术生成

多线程系列四之Thread类用法

提示:本文主要讲述Thread类的一些方法使用

一、Thread类的方法

1) 构造方法

在这里插入图片描述
以第四种方法举例
在这里插入图片描述

2) get方法

1.t.getId方法获取线程的id
2.t.getName获取线程的名字
3.t.getState获取线程的状态(线程共有六种状态,将在相关文章做出详解)
在这里插入图片描述
在这里插入图片描述

3) isDemo()、setDemo()

1.除了主线程之外,其他线程都是前台线程
前台线程:会阻止进程结束,工作没做完,线程是不会结束的
后台线程:又叫做守护线程,当mian线程结束时候,无论t线程工作是否做完都必须结束。
在这里插入图片描述
运行结果:
在这里插入图片描述
如果将setDemo的值改为false
运行结果:
在这里插入图片描述

1.setDemo()括号里面只能填true或者是false
2.如果设置为true,调用该方法的线程是守护线程,相反则为前台线程
3.守护线程会随main线程的结束二终止,无论守护线程的工作是否做完,都必须终止

4) isAlive

1.图解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.在没有t.start之前 PCB还未真正创建,所以此时输出是false,只有在PCB创建完后t.isAlive才会输出true
2.run方法执行完后,PCB就在被释放了,但是此时t对象还在,所以此时isAlive输出的是false。

二、线程的终止

1) 通过标志位来控制线程的终止

在这里插入图片描述

1.t线程负责读取这个标志位
2.在mian线程中修改这个标志位的值,就可以终止t线程。

2) Thread自带的标志位来进行判定

1.忽略这个终止请求继续执行**

在这里插入图片描述
运行结果:在这里插入图片描述

1.currentThread是Thread类的静态方法,可以通过这个方法获取到当前线程,简而言之就是,哪个线程调用的这个方法,得到就是哪个线程对象的引用
2.加入! 逻辑取反,因此isTnterrupted为true表示被终止,为false表示线程继续执行。

在这里插入图片描述
但是为什么t线程还会继续执行呢?
因为interrupt做了两件事:
1.把线程内部的标志位设置为true
2.如果此时线程正在sleep,就会触发异常,把sleep唤醒,而sleep唤醒后又会做一件事,就是把标志位设置回false,因此t线程还会继续执行。

2.立即响应终止请求

在异常内加入break可以立即响应终止请求
在这里插入图片描述
运行结果:
在这里插入图片描述

3.做一些事情后再响应这个终止请求

在这里插入图片描述
运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值