`
hz_chenwenbiao
  • 浏览: 1010147 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

线程的interrupt方法

阅读更多

如下代码片段:

Thread thread = new Thread(){
			 public void run(){
				 System.out.println("thread");
			 }
		 };
		 
		 thread.start();
		 thread.interrupt();
		 System.out.println("end");

 调用了interrupt方法却没有产生中断的原因:

对线程的interrupt是对线程处在sleep,wait,join状态的时候才起作用。InterruptException不interrupt()方法抛出的,interrupt()只改变线程的中断状态,sleep,wait,join的内部会不停的检查线程中断状态,如果它们检查到线程处于中断状态,就抛出异常中断线程。如果你的线程不处于这3个状态中,调用interrupt不会中断线程,或者说不会马上中断线程,如果后面的代码有让线程进入上面3个状态的其中一个,线程会马上抛出InterruptException而中断,因为你之前的interrupt()调用改变了线程的内部状态。

我们可以通过如下例子来来看效果:

Thread thread = new Thread(){
			 public void run(){
				 System.out.println("thread");//
				 
				 try {
					Thread.sleep(20000);
				} catch (InterruptedException e) {//在主线程里主动调用中断,所以这里还没等睡够就会被叫起来,产生中断异常
					e.printStackTrace();
				}
			 }
		 };
		 
		 thread.start();
		 thread.interrupt();//这里主线程会执行下来,而thread也会执行它自己的东西,这里将线程的中断状态改变,那么等到出遇到thread里的sleep时就会产生中断
		 System.out.println("end");
	 }

 

分享到:
评论

相关推荐

    09.多线程编程基础-停止线程-使用interrupt方法中断线程.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

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

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

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法、yield()方法、join方法、interrupt()方法

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...

    一个线程join另一个线程,(包括和interrupt互动的用法)3---马克-to-win java视频

    一个线程join另一个线程,(包括和interrupt互动的用法)3---马克-to-win java视频

    一个线程join另一个线程,(包括和interrupt互动的用法)1---马克-to-win java视频

    一个线程join另一个线程,(包括和interrupt互动的用法)1---马克-to-win java视频

    线程及方法调用

    在Java中,推荐使用`interrupt()`方法来请求线程中断,然后在线程的`run()`方法中检查`isInterrupted()`或`interrupted()`状态来决定是否退出循环。例如: ```java public class MyRunnable implements Runnable { ...

    java线程中断之interrupt和stop.docx

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

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

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

    Interrupt方法结束线程

    `interrupt()`方法是Java提供的用于中断线程执行的关键工具,但它的行为并非如许多人所理解的那样直接结束线程。下面是关于`interrupt()`方法以及线程中断机制的详细解析: 1. **线程的中断状态**: - 线程中断...

    JAVA多线程操作方法实用大全

    在上述示例中,`TestIsAlive`展示了如何使用`isAlive()`方法检查线程是否运行,而`TestInterrupt`演示了`sleep()`和`interrupt()`的用法。当`Thread.sleep()`被`interrupt()`打断时,`InterruptedException`会被抛出...

    线程常用方法示例

    5. **Interrupt方法**: `Thread.Interrupt`方法用于中断处于`Sleep`、`WaitOne`或`Join`状态的线程。不同于`Abort`,`Interrupt`不会立即终止线程,而是发出一个信号,使线程有机会响应并清理资源。当线程在`Sleep...

    设计滚动字演示线程状态及改变方法

    - **interrupt()**:中断线程,标记线程的中断状态。 - **isInterrupted()和interrupted()**:检查线程是否被中断,前者是非静态方法,后者是静态方法。 4. **线程同步和通信**: - **synchronized**:用于控制...

    JAVA线程停止的方法

    2. **中断线程(Interrupt)** 3. **使用`ExecutorService`和`Future`** 其中,使用标志变量是最常见也最安全的方式之一,它允许线程自然退出其执行循环,避免了突然终止带来的副作用。 ### 使用标志变量停止线程 ...

    多线程之06三种中止线程的方法比较.docx

    在实际开发过程中,推荐使用`interrupt()`方法或`volatile`标志位来优雅地中止线程,这两种方法都能够保证线程的安全性和代码的优雅性。避免使用已废弃的`stop()`方法,因为它可能会导致线程不安全的问题。

    Java多线程机制(讲述java里面与多线程有关的函数)

    挂起线程通常通过调用`sleep()`或`wait()`方法实现,恢复线程可能通过`notify()`或`notifyAll()`唤醒,终止线程则可以通过`interrupt()`方法发送中断请求,但线程本身需要检查`isInterrupted()`或`...

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

    在使用interrupt机制时,需要注意的是,interrupt方法并不像stop方法那样会中断一个正在运行的线程,而是设置一个中断标记,线程可以根据这个标记来判断是否应该被中断。 在实际应用中,interrupt机制可以用于控制...

    java多线程Demo

    - interrupt()方法用于中断线程,如果线程正在阻塞(如sleep或wait),会被中断并抛出InterruptedException。 通过这些技术,我们可以构建高效、稳定、响应迅速的多线程应用程序。在实际开发中,应根据具体需求...

    java多线程之停止线程的方法实例代码详解

    总结以上所述,Java多线程之停止线程的方法实例代码详解可以使用退出标记、interrupt()方法和interrupted()方法来停止线程。使用退出标记停止线程简单易行,但需要对线程的执行过程进行控制。使用interrupt()方法和...

    深入分析JAVA 多线程--interrupt()和线程终止方式

    其它线程调用本线程的 interrupt() 方法时,会通过 checkAccess() 检查权限。这有可能抛出 SecurityException 异常。 如果本线程是处于阻塞状态:调用线程的 wait() , wait(long) 或 wait(long, int) 会让它进入...

Global site tag (gtag.js) - Google Analytics