多线程系列四之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.做一些事情后再响应这个终止请求
运行结果: