我正在阅读Java Threads。我正在研究sleep()
方法。这些书说明了
当线程遇到
sleep
电话时,它必须进入休眠状态 指定的时间,除非它在唤醒之前被中断 时间。
我正在阅读关于中断的内容,但是线程如何向自身发送中断?我认同
另一个线程可以发送中断?我理解正确吗?另外,做两件事
线程,一个将发送中断的应该具有相同的目标Runnable?如果
假设一个线程被中断,它是否会回到Runnable
状态?真的对不起,
如果我听起来很愚蠢,那对我来说真是太新了。感谢
答案 0 :(得分:5)
一个线程在睡觉时不会自动中断,因为它正在......睡觉。
一张图片胜过千言万语所以这里有一个简单的例子,一个线程开始睡眠,主线程中断它:
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
答案 1 :(得分:0)
至于主要问题 - 睡眠线程不会因为睡眠而中断自身,但任何其他线程都可以试图破坏睡眠线程。 Here you have doc explaining threads and thread lifecycle.
答案 2 :(得分:0)
是的,只有另一个线程可以向休眠线程发送中断。线程不可能向自己发送中断(简单地将其与现实生活进行对比,如果一个人正在睡觉然后唤醒他,我们需要其他人)。是的,在中断线程后回到Runnable
状态。
答案 3 :(得分:0)
据我所知,它的另一个线程会导致中断。因此,当一个线程调用sleep一段时间后,Java Runtime会记下这一点,当时间过去后,它会导致中断唤醒休眠线程。
答案 4 :(得分:0)
线程可以自行中断。它总是可行的。
示例是:
public static void main(String[] args) throws ParseException, InterruptedException {
Thread.currentThread().interrupt();
try{
Thread.currentThread().sleep(200);
}catch(InterruptedException ie){
System.out.println("Current thread is interrupted");
}
}
调用中断永远不会抛出异常。它设置中断状态标志。
当在调用 wait(), wait(long)或 wait(long,int)方法时阻止此线程对象类,或者 join(), join(long), join(long,int), sleep(long) 或 sleep(long,int),此类的方法,然后其中断状态将被清除,它将收到InterruptedException。
或