我在读Java线程。我正在研究sleep()方法。书上说
当一个线程遇到一个
sleep调用时,它必须在指定的时间内进入休眠状态,除非它在其唤醒时间之前被中断。
我正在读关于中断的文章,但是线程如何发送中断给自己呢?我想其他线程可以发送中断吗?我的理解正确吗?另外,这两个线程(其中一个将发送中断)是否应该具有相同的目标可运行性?如果一个线程被中断,它会返回到Runnable状态吗?我真的很抱歉,如果我听起来很蠢的话,这对我来说是很新鲜的。谢谢
发布于 2013-08-07 09:34:37
线程不能在睡觉的时候打断自己,因为它是.睡着了。
一幅图片值一千字,所以下面是一个简单的例子,一个线程开始睡觉,主线程打断它:
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();
}其中的指纹:
sleeper is going to sleep
sleeper got interrupted发布于 2013-08-07 09:23:06
至于主要问题--睡眠线程不能中断自己,因为它会休眠,但是任何其他线程都可以尝试迭代休眠线程。这里有解释线程和线程生命周期的文档。
发布于 2013-08-07 09:24:17
是的,只有另一个线程可以向休眠线程发送中断。线程不可能发送中断给自己(简单地将其与现实生活进行对比,如果一个人正在睡觉,然后唤醒他,我们需要另一个人)。是的,在中断线程之后,线程返回到Runnable状态。
https://stackoverflow.com/questions/18099474
复制相似问题