Java多线程之停止一个线程
来源:互联网 发布:vision软件怎么画图 编辑:程序博客网 时间:2024/05/20 20:18
注:本文主要参考《Java多线程编程核心技术》高洪岩
方法一:利用MyThread.interrupt()与break
public class MyThread extends Thread{
@Override
public void run() {
for(int i=0;i<1e5;i++){
if(this.interrupted()){
System.out.println("MyThread interrupted");
break; //会直接跳到for循环外面,继续执行for循环外面的代码
}
System.out.println("i= "+i);
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException{
MyThread myThread=new MyThread();
myThread.start();
Thread.sleep(1000);
myThread.interrupt();
}
}
运行结果:
i=0
.......
i= 27195
i= 27196
i= 27197
i= 27198
MyThread interrupted //表明该线程被正确停止了。
方法二:利用MyThread.interrupt()与return
如果出现下面代码:
public class MyThread extends Thread{
@Override
public void run() {
for(int i=0;i<1e5;i++){
if(this.interrupted()){
System.out.println("MyThread interrupted");
break;
}
System.out.println("i= "+i);
}
//for循环外面还有代码,当收到中断线程的指令后,break跳出
//for循环,本线程继续执行for循环外面的代码;
System.out.println("执行for循环外面的代码");
}
}
执行结果:
i=0
.......
i= 26231
i= 26232
MyThread interrupted
执行for循环外面的代码
解决办法如下:
public class MyThread extends Thread{
@Override
public void run() {
for(int i=0;i<1e5;i++){
if(this.interrupted()){
System.out.println("MyThread interrupted");
return; //利用return直接终止run方法
}
System.out.println("i= "+i);
}
System.out.println("执行for循环外面的代码");
}
}
执行结果如下:
i=0
.......
i= 37716
i= 37717
i= 37718
MyThread interrupted
方法三:利用throw new InterruptedException(),抛出异常的方法
public class MyThread extends Thread{
@Override
public void run() {
try {
for (int i = 0; i < 1e5; i++) {
if (this.interrupted()) {
System.out.println("MyThread interrupted");
throw new InterruptedException();
}
System.out.println("i= " + i);
}
System.out.println("执行for循环外面的代码");
} catch (InterruptedException e) {
System.out.println("has catched InterruptedException");
//e.printStackTrace();
}
}
}
执行结果如下:
i=0
.......
i= 37979
i= 37980
i= 37981
i= 37982
MyThread interrupted
has catched InterruptedException
注:据高洪岩老师所说,通过抛出异常来中断线程是最合适的办法,不过,上述三种方法都有自己的适用性,抛出异常的方法,适用性最广,我们也可以在catch字句中做很多事情,比如保存数据,发出警告,通知用户等。
- Java多线程之停止一个线程
- java多线程之停止线程
- java多线程之-----停止线程
- Java多线程之停止线程
- java多线程---停止、暂停一个线程
- java多线程之启动,停止线程
- Java多线程编程核心技术之---停止线程
- java 多线程 停止线程
- JAVA-多线程-停止线程
- java多线程 ---- 停止线程
- Java多线程-停止线程
- java多线程-停止线程interrupt
- Java多线程 线程的停止
- Java笔记 - 多线程 - 停止线程
- Java之线程停止
- Java之线程停止
- Java之线程停止
- Java中的多线程(四)之线程的停止
- Operating Systems: Three Easy Pieces阅读笔记(四)FILE SYSTEM- VSFC&FSCK
- 【bzoj2946】[Poi2000]公共串 后缀自动机
- linux PV操作理解
- Action实现ModelDriven接口后的运行流程
- 安卓通知的使用系列2:状态栏通知和自定义状态栏通知通知
- Java多线程之停止一个线程
- 水晶报表繁体转简体心得:之一 RPT文件篇
- uva10003(区间dp,提供两种枚举顺序)
- hdu1281二分图匹配
- 韩顺平XML学习2
- Roman to Integer
- OPENCV安装配置,从命令行执行第一个程序
- NYOJ 56 阶乘因式分解(一)
- POWERDESIGNER NAME to COMMENT and COMMENT to NAME