(Java多线程系列四)停止线程
2024-10-07 03:12:46
停止线程
停止线程的思路
①使用退出标志,使线程正常退出,也就是当
run()
方法结束后线程终止。
class Thread01 extends Thread {
// volatile关键字解决线程的可见性问题
volatile boolean flag = true;
@Override
public void run() {
while (flag) {
try {
// 可能发生异常的操作
System.out.println(getName() + "线程一直在运行。。。");
} catch (Exception e) {
System.out.println(e.getMessage());
this.stopThread();
}
}
}
public void stopThread() {
System.out.println("线程停止运行。。。");
this.flag = false;
}
}
public class StopThreadDemo01 {
public static void main(String[] args) {
Thread01 thread01 = new Thread01();
thread01.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
thread01.stopThread();
}
}
②使用
stop()
方法强行终止线程,这个方法已经被弃用了,所以这里不写。
③使用interrupt()
方法中断线程(只有线程在wait
和sleep
才会捕获InterruptedException
异常,执行终止线程的逻辑,在运行中不会捕获)
class Thread02 extends Thread {
private boolean flag = true;
@Override
public void run() {
while (flag) {
synchronized (this) {
// try {
// wait();
// } catch (InterruptedException e) {
// e.printStackTrace();
// this.stopThread();
// }
try {
sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
this.stopThread();
}
}
}
}
public void stopThread() {
System.out.println("线程已经退出。。。");
this.flag = false;
}
}
public class StopThreadDemo02 {
public static void main(String[] args) {
Thread02 thread02 = new Thread02();
thread02.start();
System.out.println("线程开始");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
thread02.interrupt();
}
}
调用
interrupt()
方法会抛出InterruptedException
异常,捕获后再做停止线程的逻辑即可。
如果线程处于类似
while(true)
运行的状态,interrupt()
方法无法中断线程。
最新文章
- plist文件里的";Bundle versions string, short"; 跟 ";Bundle version"; 的区别及作用
- RTC,登陆后添加权限值
- 十、Android学习第九天——小结(转)
- dp核心问题研究-从入门到放弃
- 【LeetCode OJ】Linked List Cycle
- 【转】Eclipse Java注释模板设置详解
- beaglebone-black 在Angstrom系统中的网络配置方法
- IntelliJ IDEA14如何配置tomcat
- Log4net 列
- 使用TypeScript实现简单的HTML5贪吃蛇游戏
- 被「李笑来老师」拉黑之「JavaScript微博自动转发的脚本」
- QT4.8.5 连接数据库(读写数据)
- oracle 11g rac R2 for linux change(public,vip)IP ,hostname (oracle 11g rac R2 修改公有,虚拟,私有IP,网卡)
- 基于jeesite的cms系统(七):GlobalException全局异常和部署
- C++ Exception机制
- DHTMLX Tree中文开发指导
- linux运维、架构之路-linux文件属性
- 阻止新的csproj工程的dll引用继承
- 算法笔记_200:第三届蓝桥杯软件类决赛真题(C语言本科)
- 轻量级ORM框架Dapper应用八:使用Dapper实现DTO