try
{
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
我理解第一部分是做什么的。但是等待的捕获部分是什么?就像执行这部分需要发生什么一样。
答案 0 :(得分:1)
sleep方法暂停当前线程的执行,在你的情况下是5000毫秒(5秒)。但是,此方法会抛出必须捕获的InterruptedException。
答案 1 :(得分:1)
因为Thread#sleep()方法被定义为在某些情况下抛出InterruptedException
,所以开发人员应该在发生此确切异常时处理它。这就是需要catch
块的原因 - 保持处理InterruptedException
答案 2 :(得分:1)
public class InterruptedException
extends Exception
当线程正在等待,休眠或以其他方式占用时抛出,并且 线程在活动之前或期间被中断。 有时,方法可能希望测试当前线程是否具有 被打断了,如果是的话,立即抛出这个例外。
最佳解释是给予╠══HERE
答案 3 :(得分:1)
你的线程要睡5秒钟。
如果另一个线程试图唤醒此线程(中断)。它将以异常块结束,并且将打印您的堆栈跟踪。
答案 4 :(得分:1)
每一段代码都由“线程”运行。您可以将其视为一个专门用于运行该特定代码的虚拟处理器。
通过调用Thread.sleep()
方法,您将此线程置于WAITING
状态一段时间。在WAITING
时,线程无法执行任何操作,特别是,它无法“听到”来自其他线程的调用。
唤醒线程并让它再次运行代码的唯一方法是向它发送一个中断,这是一个非常强大的信号。这是通过从另一个线程调用此线程的interrupt()
方法来完成的。
当唤醒时,线程再次进入RUNNING
状态,但是为了通知开发者它比预期更早被唤醒,它会抛出InterruptedException
,这是一个经过检查的异常。这就是你必须抓住并处理它的原因。
答案 5 :(得分:0)
如果InterruptedException
抛出(线程中断可能会导致此问题),try
块会捕获catch
块,并且在catch块中定义,它将打印{{1} }} 堆栈跟踪。
答案 6 :(得分:0)
如果线程被中断,那么它将抛出异常,它将被捕获在catch
块中。
答案 7 :(得分:0)
这与multithreaded applications相关。当您引用类implements Runnable
或extends Thread
的对象时,在该对象内部,Thread.sleep(i)
方法在闲置过程中,您可以在该引用上调用reference.interupt()
,它将触发InterruptedException
。这是一个例子:
在下面的代码中,Scratch
类的run
方法进入休眠状态60000毫秒(或1分钟),如果收到InterruptedExection
则打印“我已被中断” 。编写代码的方式,它不会收到此异常并将在整个时间内休眠。但是第二次运行它,行//scratch.interrupt();
取消注释,看看会发生什么。
package scratch;
/**
*
* @author bstidham
*/
public class Scratch extends Thread {
public void run() {
System.out.println("Hello from a thread!");
System.out.println("Going to sleep for 1 minute...");
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
System.out.println("I've been interrupted!");
}
System.out.println("Awake now");
}
public static void main(String args[]) {
Scratch scratch = new Scratch();
scratch.start();
//scratch.interrupt();
}
}