首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >休眠线程如何发送中断给自己?

休眠线程如何发送中断给自己?
EN

Stack Overflow用户
提问于 2013-08-07 09:20:01
回答 5查看 1.4K关注 0票数 1

我在读Java线程。我正在研究sleep()方法。书上说

当一个线程遇到一个sleep调用时,它必须在指定的时间内进入休眠状态,除非它在其唤醒时间之前被中断。

我正在读关于中断的文章,但是线程如何发送中断给自己呢?我想其他线程可以发送中断吗?我的理解正确吗?另外,这两个线程(其中一个将发送中断)是否应该具有相同的目标可运行性?如果一个线程被中断,它会返回到Runnable状态吗?我真的很抱歉,如果我听起来很蠢的话,这对我来说是很新鲜的。谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-07 09:34:37

线程不能在睡觉的时候打断自己,因为它是.睡着了。

一幅图片值一千字,所以下面是一个简单的例子,一个线程开始睡觉,主线程打断它:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
    Runnable sleeper = new Runnable() {
        public void run() {
            try {
                System.out.println("sleeper is going to sleep");
                Thread.sleep(1000);
                System.out.println("sleeper is awake");
            } catch (InterruptedException e) {
                System.out.println("sleeper got interrupted");
            }
        }
    };

    Thread t = new Thread(sleeper);
    t.start(); //run sleeper in its own thread
    Thread.sleep(500); //sleeping in main a little to make sure t is started
    t.interrupt();
}

其中的指纹:

代码语言:javascript
复制
sleeper is going to sleep
sleeper got interrupted
票数 5
EN

Stack Overflow用户

发布于 2013-08-07 09:23:06

至于主要问题--睡眠线程不能中断自己,因为它会休眠,但是任何其他线程都可以尝试迭代休眠线程。这里有解释线程和线程生命周期的文档。

票数 0
EN

Stack Overflow用户

发布于 2013-08-07 09:24:17

是的,只有另一个线程可以向休眠线程发送中断。线程不可能发送中断给自己(简单地将其与现实生活进行对比,如果一个人正在睡觉,然后唤醒他,我们需要另一个人)。是的,在中断线程之后,线程返回到Runnable状态。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18099474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档