线程类的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()方法也无法使它停止
分享到:
相关推荐
Java并发编程中的线程中断是一个关键机制,它允许开发者在程序运行过程中显式地请求某个线程停止执行。在本示例中,我们创建了一个名为`PrimeGenerator`的线程,该线程会不断地查找并打印质数。线程中断机制的使用...
Java线程中断是一个关键特性,它允许程序员在运行时通知一个线程停止其当前的工作并进行清理。在上述的Java线程中断示例程序中,我们看到一个简单的场景,模拟了一个班级中的学生(student线程)和教师(teacher线程...
### Java线程中断机制详解:`interrupt`与`stop`方法 #### 一、引言 在Java多线程编程中,线程控制是至关重要的技术之一。有时我们需要在特定条件下停止某个线程的执行,或者中断正在等待的线程。Java提供了多种...
C++11关于thead的应用,利用std::condition std::mutex提供如何中断,停止和继续功能,
"Java多线程中断机制三种方法及示例" Java多线程中断机制是Java编程语言中一个重要的概念,涉及到线程的生命周期和线程的协作机制。中断机制是一种协作机制,通过中断并不能直接终止另一个线程,而需要被中断的线程...
线程中断 Java 中的线程中断是一种线程间的协作模式,通过设置线程的中断标志并不能直接终止该线程的执行,而是被中断的线程根据中断状态自行处理。即“线程中断”并不是字面意思——线程真的中断了,而是设置了...
在Java并发编程中,线程中断是一个重要的概念,它允许我们优雅地停止正在运行的线程,而不是简单地杀死它们。在"Java并发编程示例(四):可控的线程中断"中,我们将深入理解如何利用`InterruptedException`来更好地...
Java 多线程中断代码详解 Java 中断机制是多线程编程中的一种重要机制。它允许一个线程请求另一个线程停止执行某个操作或退出线程。Java 提供了多种方式来中断线程,包括使用 stop() 方法、interrupt() 方法和使用 ...
Java线程中断是多线程编程中一个关键的概念,它允许一个线程在运行时被其他线程“通知”停止其当前活动。线程中断不是立即终止线程,而是发送一个中断信号,由目标线程自己决定如何响应这个信号。在Java中,线程中断...
在Java中,线程中断是一种重要的协作机制,用于控制线程的停止。线程中断并不会真正强制线程停止,而是通过一种协作的方式使得线程能够适时地停下来。Java提供了中断线程的机制,但并不提供直接停止线程的方法,因为...
} catch (InterruptedException e) {//处理完中断异常后,返回到run()方法入口//如果没有return,线程不会实际被中断,
Java多线程中断机制及实例详解 Java多线程中断机制是Java语言中的一种机制,用于控制线程的执行和中断。在Java中,线程可以通过interrupt()方法来中断其他线程的执行,而被中断的线程可以通过isInterrupted()方法来...
线程中断是控制线程执行流程的一种机制,它允许我们优雅地停止线程的执行,特别是在需要中断长时间运行或者阻塞操作时。本文将深入探讨如何检测Java线程的中断状态,并通过示例代码进行解释。 首先,Java提供了两种...
在Java编程中,线程中断是一项关键的并发控制机制,用于在多线程环境中优雅地终止或改变线程的行为。本文将深入探讨Java线程中断的本质以及编程原则。 首先,理解线程中断的本质。Java线程中断并不意味着强制停止一...
线程中断是通过`Thread.interrupt()`方法来实现的,这个方法会设置当前线程的中断标志。但是,这并不会立即停止线程的执行,而是在线程运行过程中,如果检测到中断标志被设置,通常是在循环或者阻塞操作中,会抛出`...
Java通过`Thread.interrupt()`方法提供线程中断机制。当调用一个线程的`interrupt()`方法时,并不会立即停止该线程,而是设置线程的中断状态。线程需要通过检查`InterruptedException`异常来响应中断。例如,当线程...
Java多线程笔记是 Java 编程语言中关于多线程编程的笔记,涵盖了线程基础知识、线程优先级、线程状态、守护线程、构造线程、线程中断等多方面的内容。 获取简单 main 程序中的线程 在 Java 中,可以使用 ...
动力节点的Java课程适合绝对零基础的观看,教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者想让Java基础...
线程中断是通过调用`Thread.interrupt()`方法来实现的,它会设置线程的中断标志。当线程正在运行时,这个中断标志通常不会立即导致线程停止,而是作为一种请求,告知线程应该尽快结束。线程需要定期检查中断状态,并...