停止线程的三种方法
来源:互联网 发布:javascript new关键字 编辑:程序博客网 时间:2024/06/16 17:45
在Java中有以下3种方法可以终止正在运行的线程:
1. 抛异常法;
2. 使用stop方法强行终止线程
3. 使用interrupt方法中断线程
下面分别对它们进行介绍:
一、抛异常法
抛异常法:顾名思义就是通过抛出一个异常,然后再捕获异常,从而跳过后面要继续执行的语句,达到终止线程的目的。使用抛异常法首先要判断该线程是否是停止状态,只有是停止状态才抛异常。
下面是具体示例:
package com.vhqimk.thread;/* * 测试通过抛异常终止线程的情况 */public class Test { public static void main(String[] args) { try { MyThread myThread = new MyThread(); myThread.start(); myThread.sleep(2000); myThread.interrupt(); } catch (InterruptedException e) { System.out.println("main catch"); e.printStackTrace(); } }}class MyThread extends Thread { public void run() { super.run(); try { for (int i = 0; i < 500000; i++) { if (this.interrupted()) { System.out.println("已经是停止状态了!我要退出了!"); throw new InterruptedException(); } System.out.println("i=" + (i + 1)); } System.out.println("我在for下面"); } catch (InterruptedException e) { System.out.println("进MyThread类run方法中的catch了!"); e.printStackTrace(); } System.out.println("end!"); }}
运行结果如图 1-7所示
图 1-7 运行结果
二、使用stop暴力停止
使用stop()方法停止线程则是非常暴力的,而且stop是作废过期的方法,因此不推荐使用这种方法。
下面是代码示例
package com.vhqimk.thread;/* * 测试stop方法终止线程的情况 */public class Test { public static void main(String[] args) { try { MyThread myThread = new MyThread(); myThread.start(); myThread.sleep(8000); myThread.stop(); } catch (InterruptedException e) { e.printStackTrace(); } }}class MyThread extends Thread { private int i = 0; public void run() { super.run(); try { while (true) { i++; System.out.println("i=" + i); Thread.sleep(1000); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("end!"); }}
运行结果如图 1-8所示
图 1-8 线程被暴力停止(stop)运行后图标呈灰色
三、使用interrupt方法中断线程
将方法interrupt()与return结合使用也能实现停止线程的效果,下面是具体示例:
package com.vhqimk.thread;/* * 测试interrupt方法终止线程的情况 */public class Test { public static void main(String[] args) throws InterruptedException { MyThread myThread = new MyThread(); myThread.start(); Thread.sleep(8000); myThread.interrupt(); }}class MyThread extends Thread { private int i = 0; public void run() { while (true) { if (this.isInterrupted()) { System.out.println("停止了!"); return; } System.out.println("timer=" + System.currentTimeMillis()); } }}
运行结果如图 1-9所示
图 1-9 成功停止运行
总结:停止线程有三种方法,建议使用“抛异常”法来实现线程的停止,因为在catch块中可以对异常信息进行相关的处理,而且使用异常流能更好、更方便地控制程序的运行流程,不会像第三种方法那样出现多个return,造成污染,也不建议用stop方法强行终止线程,因为使用它可能产生不可预料的结果。
(正在学习高洪岩先生著的《java多线程编程核心技术》,例子摘自此书,有兴趣的可以查阅此书)
阅读全文
0 0
- 停止线程的三种方法
- android 停止 终止 Thread 线程的三种方法
- 停止线程的两种方法
- java停止线程的方法
- java 线程停止的方法
- Java线程停止的方法
- 停止线程的三个方法
- Qt停止线程的方法
- Java线程停止的方法
- 停止线程的多种方法
- Java停止线程运行的三种方式
- 线程的停止、守护线程、join()方法
- Java停止一个线程的几种方法
- 使Java线程停止的两种方法
- java线程停止【三】
- 论停止Java线程的方法
- java/android 线程停止的方法
- Java中停止线程执行的方法
- 图片上传及显示
- kafka基础使用方法(java)
- Docker基础教程(4)进阶命令-1-网络,数据卷等内容
- position 和 display 的取值和各自的意思和用法
- 相机围绕目标旋转
- 停止线程的三种方法
- CentOS 7 安装配置 NFS
- 详解Uncoide、ASCII、UTF-8
- OpenCV 1.0在VC6下安装与配置(附测试程序)
- [Android]Ams 广播发送原理(三)
- 背景图片铺满整个屏幕
- 从零到一学Maven——宏观把控
- 算法-寻找两个链表的第一个公共结点
- git