这尝试和捕获方法有什么作用?

时间:2014-01-30 12:51:15

标签: java exception try-catch

try 
{
    Thread.sleep(5000);
} catch (InterruptedException e) {
     e.printStackTrace();
}

我理解第一部分是做什么的。但是等待的捕获部分是什么?就像执行这部分需要发生什么一样。

8 个答案:

答案 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 Runnableextends 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();
    }
}