线程类的interrupt()方法可对某一线程进行中断,例子如下:
public class SleepBlocked implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
try {
TimeUnit.SECONDS.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("Interupted Exception");
}
System.out.println("Exiting SleepBlocked.run()");
}
}
=======================
public class Interrupting {
private static ExecutorService exec=Executors.newCachedThreadPool();
static void test(Runnable r) throws InterruptedException{
Future<?> f=exec.submit(r);
TimeUnit.MILLISECONDS.sleep(100);
System.out.println("Interrupting "+r.getClass().getName());
f.cancel(true); //中断运行的线程
//cancel()方法是一种中断由Executor启动的单个线程的方式
System.out.println("Interrupt set to "+r.getClass().getName());
}
public static void main(String[] args) throws InterruptedException{
test(new SleepBlocked());
//这里SleepBlocked是可中断的
TimeUnit.SECONDS.sleep(3);
System.out.println("Aborting with System.exit(0)");
System.exit(0);
}
}
-------------运行结果如下:
Interrupting com.test.thread.block.SleepBlocked
Interrupt set to com.test.thread.block.SleepBlocked
Interupted Exception
Exiting SleepBlocked.run()
======================
有些资源是无法中断的比如IO等,实例如下:
public class IOBlocked implements Runnable{
private InputStream is;
public IOBlocked(InputStream is) {
this.is=is;
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Waiting For Read...");
try {
is.read();
} catch (IOException e) {
// TODO Auto-generated catch block
if(Thread.currentThread().isInterrupted()){
System.out.println("Interrupted from blocked I/O");
}else{
throw new RuntimeException(e);
}
}
System.out.println("Exiting IOBlocked.run()");
}
}
=======================
上面的测试方法修改为test(new IOBlocked(System.in)),这时候的运行结果为:
Waiting For Read...
Interrupting com.test.thread.block.IOBlocked
Interrupt set to com.test.thread.block.IOBlocked
Aborting with System.exit(0)
=============================
另外synchronized也是无法中断的,示例如下:
public class SynchronizedBlocked implements Runnable{
public synchronized void f(){
while(true)
Thread.yield();
}
public SynchronizedBlocked() {
// TODO Auto-generated constructor stub
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
f();
}
}.start();
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("Try to call f");
f();
System.out.println("Exting SynchronizedBlocked.run()");
}
}
========================
将测试方法修改为test(new SynchronizedBlocked()),执行结果如下:
Try to call f
Interrupting com.test.thread.block.SynchronizedBlocked
Interrupt set to com.test.thread.block.SynchronizedBlocked
Aborting with System.exit(0)
因为这里的f()方法一直不释放锁,interrupt()方法也无法使它停止
分享到:
相关推荐
用户接口 进程管理 处理机管理 存储管理 文件系统 外部设备管理
C++11关于thead的应用,利用std::condition std::mutex提供如何中断,停止和继续功能,
java线程中断之interrupt和stop.docx
Java线程中断示例程序的代码清单.pdf 学习资料 复习资料 教学资源
线程中断 Java 中的线程中断是一种线程间的协作模式,通过设置线程的中断标志并不能直接终止该线程的执行,而是被中断的线程根据中断状态自行处理。即“线程中断”并不是字面意思——线程真的中断了,而是设置了...
} catch (InterruptedException e) {//处理完中断异常后,返回到run()方法入口//如果没有return,线程不会实际被中断,
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...
主要介绍了Java多线程中断机制三种方法及示例,向大家分享了这三种方法的介绍几代码示例,具有一定参考价值,需要的朋友可以了解下。
主要介绍了Java并发编程示例(四):可控的线程中断,在本节,我们将使用一个线程查找指定目录及其子目录下文件来演示通过使用InterruptedException异常控制线程中断,需要的朋友可以参考下
访问路径为:http://localhost:8080/web001/test.do?flag=xxyyzz&switch=off 其中switch开关参数取值有两种:on和off,on表示执行线程对应的任务,off表示中断线程正在执行的任务。
线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法...线程的中断是指在一个线程中断另一个线程的执行。在Java中,可以使用Thread类的interrupt()方法实现线程的中断。(run方法执行完毕)
主要介绍了Java检测线程中断状态的方法,结合实例形式分析了java针对线程中断状态检测的相关实现技巧,需要的朋友可以参考下
主要介绍了java多线程中断代码详解,具有一定参考价值,需要的朋友可以了解下。
给大家分享了java线程中断的办法以及相关知识点内容,有需要的朋友们可以学习参考下。
中断器–运行一个函数,可以从另一个线程中断它 使用范例 import { runInterruptible , interrupt } from 'interruptor' ; runInterruptible ( handle => { // pass handle to another thread using .postMessage()...
在本篇文章中我们给大家分享了关于Java线程中断的相关知识点内容以及相关代码实例,有兴趣的朋友们可以学习下。
线程中断 静态方法(有关同步的细节) 总结 第五章 Java线程编程的例子 数据结构和容器 简单的同步例子 一个网络服务器类 AsyncInputStream类 使用TCPServer和AsynclnputStream 总结 第六章 Java线程调度 线程...
锁定排序 3.6 线程优先级 3.7 监控程序线程 3.8 在应用程序中...线程中断 3.10 完成DownloadManager 3.11 线程中的过时方法 3.12 DownloadFiles类 3.13 未捕捉的异常 3.14 自愿放弃...
主要介绍了Java并发编程示例(三):线程中断,在本节,我们所开发的示例程序将会创建一个线程,五秒钟后,利用中断机制强制中止这个线程,需要的朋友可以参考下
Java的中断是一种协作机制。也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己,本文将详细介绍,需要了解的朋友可以参考下