关于线程interrupt方法的问题,请前辈指点。

codeartisan codeartisan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
一看字面意思,我以为是用来中断线程的。后来看了书上的说明,我理解成它是用来中断sleep状态的。我做了试验,写了这样一段代码:

=====================================================================
public class ThreadTest implements Runnable
{
public void run()
{
System.out.println("sleep...至Blocked状态");
while(true)
{
System.out.println("running...");
try
{
Thread.sleep(1000);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
}
}

public static void main(String[] args)
{
Thread thread = new Thread(new ThreadTest());
thread.start();
thread.interrupt();

}
}
=====================================================================

运行结果如下:

=====================================================================
sleep...至Blocked状态
running...
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at ThreadTest.run(ThreadTest.java:14)
at java.lang.Thread.run(Thread.java:619)
running...
running...
running...
running...
running...
running...
=====================================================================

这时我只能这么理解:程序启动的时候有一个主线程,调用thread.start()的时候又开启了一个线程,接着执行这个线程的死循环里的第一次sleep(1000)方法,同时主线程执行了thread.interrupt()方法,使第一次的sleep中断。(我把interrupt理解成“唤醒”功能,呵呵,自己随便想的一个词。)

而我继续往下看书的时候(林信良的《Java JDK5.0学习笔记》),书上的一段话把我弄闷了:

=====================================================================
如果您想要停止一个线程的执行,当您查看API时,您会发现Thread的stop()方法已经被标示为deprecated,不建议使用stop()来停止一个线程的运行。

如果想要停止一个线程,最好自行实现。一个线程要进入Dead状态,就是执行完run()方法,简单地说,如果您想要停止一个线程的执行,就要提供一个方式让线程可以完成run()的流程,而这也是自行实现线程停止的基本概念。

................

如果线程因为执行sleep()而进入Blocked状态,而您想要停止它,可以使用interrupt(),而程序会抛出InterruptedException异常,因而使得线程离开run()方法。
=====================================================================

我的理解是,离开了run方法,不就是线程停止了吗?这和我刚刚的测试结果矛盾了呀。不明白了……

请前辈们指点迷津,并说说我理解上有哪些错误的地方,谢谢!
...全文

相关推荐

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

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

雁峰

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

主要介绍了Java线程Thread之interrupt中断解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

weixin_38500117

Java多线程之中断线程(Interrupt)的使用详解

interrupt字面上是中断的意思,但在Java里Thread.interrupt()方法实际上通过某种方式通知线程,并不会直接中止该线程

weixin_38731553

Interrupt方法结束线程

4.1.5.3. Interrupt 方法结束线程使用interrupt()方法来中断线程有两种情况: 1. 线程处于阻塞状态:如使用了sleep,同步锁的wait,socket中的receiver,accept等方法时,会使线程处于阻塞状态。当调用线程的interrupt()方法时,会抛出InterruptException异常。阻塞中的那个方法抛出这个异常,通过代码捕获该异常,然后break跳出循环状态,从而让我们有机会结束这个线程的执行。通常很多人认为只要调用interrupt方法线程就会结束,实际上是错的, 一定要先捕获InterruptedException异常之后通过break来跳

weixin_38607311

Java如何使用interrupt()终止线程

主要介绍了Java如何使用interrupt()终止线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38542148
评论 15
收藏 已收藏
分享
返回顶部
codeartisan
Java SE 62,621 成员 307,251 内容