`

thread interrupt

阅读更多
Thread thread4 = new Thread(){
public void run(){
try {
//synchronized(this){
//this.wait(10000);
System.out.println("start A4");
System.out.println("A4 interrupt  "+currentThread().isInterrupted());
    currentThread().sleep(100000);
long time= System.currentTimeMillis();
while(System.currentTimeMillis()-time<20000)
{

}
System.out.println("end  A4");
//}
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("B4");
System.out.println("B4 interrupt  "+currentThread().isInterrupted());
}
}

};

thread4.start();
//主线程休眠 start
try {
Thread.sleep(5000l);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("B5");
}
////主线程休眠 end
System.out.println("interrupt...start");
thread4.interrupt();

System.out.println("interrupt...end");



如上代码,interrupt的作用就是设置打断状态true或者false;
如果调用过thread4.interrupt();    则再调用sleep  join  wait就会抛出InterruptedException异常,并且再次把interrupt状态设置为false;如果没有调用sleep  join  wait,那么我们可以发现在thread4.interrupt()之后currentThread().isInterrupted()为true。


第二种情况  当被block之后,我发现也会抛出InterruptedException,代码如下
Thread thread4 = new Thread(){
public void run(){
try {
//synchronized(this){
//this.wait(10000);
System.out.println("start A4");
System.out.println("A4 interrupt  "+currentThread().isInterrupted());
BlockingQueue<String> q= new ArrayBlockingQueue<String>(2);
q.put("d");
q.put("d");
q.put("d");
System.out.println("end  A4");
//}
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("B4");
System.out.println("B4 interrupt  "+currentThread().isInterrupted());
}
}

};

thread4.start();
// try {
// Thread.sleep(5000l);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// System.out.println("B5");
// }
System.out.println("interrupt...start");
thread4.interrupt();

System.out.println("interrupt...end");
分享到:
评论

相关推荐

    Thread.interrupt()方法的使用以及使用它退出线程

    Thread.interrupt()方法的使用以及使用它退出线程

    线程终止问题

    public class ThreadInterrupt extends Thread { public void run() { try { Thread.sleep(50000); // 延迟 50 秒 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public ...

    Java线程如何终止.pdf

    public class ThreadInterrupt extends Thread { public void run() { try { Thread.sleep(50000); } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public static void ...

    浅谈Java线程Thread之interrupt中断解析

    Java线程Thread之interrupt中断解析 Java线程Thread之interrupt中断机制是Java多线程编程中的一种重要机制。通过调用Thread.interrupt()方法,可以设置线程的中断状态位,线程会不时地检测这个中断标示位,以判断...

    《JAVA语言程序设计》期末考试试题及答案5(应考必备题库).pdf

    文件中出现了"Threadinterrupt()",这涉及到了Java中的线程中断机制。当线程正在运行时,若另一个线程对其调用了interrupt()方法,那么被中断的线程将会抛出InterruptedException。这个异常是受检异常,线程需要捕获...

    Thread类的interrupt(),interrupted(),isInterrupted()1

    在Java多线程编程中,理解`Thread`类中的`interrupt()`、`interrupted()`和`isInterrupted()`方法至关重要,因为它们与线程中断机制紧密相关。线程中断是Java提供的一种协作式中断机制,它并不强制结束线程,而是...

    RT-Thread常见函数.zip_RTT_rt thread_rt-thread函数_rt_thread函数_手册

    5. **中断处理**:RTT支持中断服务,`rt_interrupt_enter`和`rt_interrupt_leave`用于中断上下文的切换,`rt_hw_interrupt_handle`处理中断事件。 6. **设备驱动**:RTT提供了统一的设备驱动接口,如I/O操作,`rt_...

    java线程中的interrupt,isInterrupt,interrupted方法

    在 Java 中,线程(Thread)类提供了三个相关的方法:interrupt、isInterrupted 和 interrupted,这三个方法都是用于处理线程的中断状态的。下面我们将详细介绍这三个方法的用法和区别。 interrupt 方法 interrupt...

    Java中interrupt的使用.docx

    Thread.currentThread().interrupt(); // 重新设置中断标志 // 其他处理逻辑 } ``` 总的来说,Java的中断机制提供了一种安全且灵活的方式来停止线程,通过结合使用`interrupt()`, `isInterrupted()`, 和 `...

    STM32H750移植rt-thread操作系统完整工程.zip

    3. **配置中断服务例程**:根据rt-thread的要求,为每个中断服务例程设置适当的向量地址,并在中断处理函数中调用rt_interrupt_enter()和rt_interrupt_leave(),以确保rt-thread中断服务的正确上下文切换。...

    stm32f103c8t6移植RT-Thread之线程管理

    在RT-Thread中,中断服务需要在适当的位置调用`rt_interrupt_enter`和`rt_interrupt_leave`来通知调度器,保证中断处理的上下文安全。 此外,为了调试和优化,我们还可以利用RT-Thread提供的各种调试工具,如RTT ...

    Java interrupt()方法使用注意_动力节点Java学院整理

    相反,`Thread.interrupt()`提供了一种更安全的方式来请求线程中断。但是,`interrupt()`方法不会强制线程立即停止,而是设置线程的中断状态标志,这需要线程本身来检查并响应这个标志。 如Listing A所示的示例,当...

    线程外部挂起恢复控制(不使用Suspend与Resume中止线程)

    本人利用Thread.Abort()与Thread.Interrupt()可以引起目标线程异常的特点,开发了一种不使用已过时的方法来变相从外部控制线程的挂起与恢复的技术,原理简单,方便理解。 相关技术参考:...

    ThreadX API查询手册.chm

    tx_interrupt_control. 互斥锁相关API tx_mutex_create, tx_mutex_delete, tx_mutex_get, tx_mutex_info_get, tx_mutex_prioritize, tx_mutex_put. 队列相关API tx_queue_create, tx_queue_delete, tx_queue_...

    RT-Thread操作系统实例

    启动代码通常包括设置堆栈、初始化NVIC(Nested Vectored Interrupt Controller)、调用RT-Thread的初始化函数rtthread_startup等步骤。同时,需要为STM32F103VCT5配置中断向量表,确保中断处理程序能够正确运行。 ...

    java线程中断之interrupt和stop.docx

    ### Java线程中断机制详解:`interrupt`与`stop`方法 #### 一、引言 在Java多线程编程中,线程控制是至关重要的技术之一。有时我们需要在特定条件下停止某个线程的执行,或者中断正在等待的线程。Java提供了多种...

    ThreadX_User_Guide_V5.pdf.zip_ThreadX user guide_threadx_threadx

    7. **中断服务例程(Interrupt Service Routines, ISR)**:ThreadX允许在中断上下文中执行代码,中断服务例程可以快速响应硬件事件,并通过事件、信号量或消息队列与线程通信。 8. **网络栈集成**:ThreadX通常与...

    Interrupt方法结束线程

    当调用`Thread.interrupt()`方法时,目标线程的中断标志会被置为true。 2. **阻塞状态下的中断**: - 当线程处于阻塞状态,比如调用了`sleep()`, `wait()`, `Socket`的`receiver()`或`accept()`等方法时,如果此时...

Global site tag (gtag.js) - Google Analytics