Java 这种尝试捕获方法的作用是什么?

Java 这种尝试捕获方法的作用是什么?,java,exception,try-catch,Java,Exception,Try Catch,我明白第一部分在做什么。但关键的部分还在等什么呢?类似于执行此部分所需的操作。如果InterruptedException从try块抛出(线程中断可能会导致这种情况),该块将被catch块捕获,并且正如您在catch块中定义的,它将打印异常堆栈跟踪 如果InterruptedException从try块抛出(线程中断可能会导致这种情况),该块将被catch块捕获,并且正如您在catch块中定义的,它将打印异常堆栈跟踪 如果线程被中断,它将抛出异常,并在catch块中捕获。如果线程被中断,它将抛出

我明白第一部分在做什么。但关键的部分还在等什么呢?类似于执行此部分所需的操作。

如果
InterruptedException
try
块抛出(线程中断可能会导致这种情况),该块将被
catch
块捕获,并且正如您在catch块中定义的,它将打印
异常
堆栈跟踪

如果
InterruptedException
try
块抛出(线程中断可能会导致这种情况),该块将被
catch
块捕获,并且正如您在catch块中定义的,它将打印
异常
堆栈跟踪

如果线程被中断,它将抛出异常,并在
catch
块中捕获。

如果线程被中断,它将抛出异常,并在
catch
块中捕获。

睡眠方法停止当前线程的执行,在您的情况下为5000毫秒(5秒)。但是,此方法会引发必须捕获的InterruptedException。

在您的情况下,sleep方法会停止当前线程的执行,即5000毫秒(5秒)。但是,此方法抛出必须捕获的InterruptedException。

由于该方法定义为在某些情况下抛出
InterruptedException,因此开发人员应在发生此异常时处理它。这就是为什么需要
catch
块的原因-为了保存处理
InterruptedException

的逻辑,因为该方法被定义为在某些情况下抛出
InterruptedException
,所以开发人员应该在该异常发生时处理它。这就是为什么需要
catch
块来保存处理
InterruptedException

try 
{
    Thread.sleep(5000);
} catch (InterruptedException e) {
     e.printStackTrace();
}
当线程正在等待、睡眠或被占用时抛出,以及 线程在活动之前或期间中断。 有时,一种方法可能希望测试当前线程是否具有 已中断,如果已中断,则立即引发此异常

给出了最好的解释╠══

当线程正在等待、睡眠或被占用时抛出,以及 线程在活动之前或期间中断。 有时,一种方法可能希望测试当前线程是否具有 已中断,如果已中断,则立即引发此异常


给出了最好的解释╠══

您的线程将睡眠5秒钟


如果另一个线程试图唤醒该线程(中断)。它将在异常块中结束,并将打印stacktrace。

您的线程将休眠5秒


如果另一个线程试图唤醒该线程(中断)。它将在异常块中结束,并将打印stacktrace。

每段代码都由一个“线程”运行。您可以将其视为一个专用于运行特定代码段的小型虚拟处理器

通过调用
Thread.sleep()
方法,可以将此线程置于
等待
状态一段时间。当
等待时
,线程无法执行任何操作,特别是,它无法“听到”来自其他线程的调用

唤醒线程并让其再次运行代码的唯一方法是向其发送一个中断,这是一个非常强的信号。这是通过从另一个线程调用此线程的
interrupt()
方法来完成的


当被唤醒时,线程再次进入
RUNNING
状态,但为了向开发人员发出信号,表明它比预期的更早被唤醒,它会抛出一个异常,这是一个选中的异常。这就是为什么你必须抓住它并处理它。

每段代码都是由一个“线程”运行的。您可以将其视为一个专用于运行特定代码段的小型虚拟处理器

通过调用
Thread.sleep()
方法,可以将此线程置于
等待
状态一段时间。当
等待时
,线程无法执行任何操作,特别是,它无法“听到”来自其他线程的调用

唤醒线程并让其再次运行代码的唯一方法是向其发送一个中断,这是一个非常强的信号。这是通过从另一个线程调用此线程的
interrupt()
方法来完成的

当被唤醒时,线程再次进入
RUNNING
状态,但为了向开发人员发出信号,表明它比预期的更早被唤醒,它会抛出一个异常,这是一个选中的异常。这就是你必须抓住它并处理它的原因。

这与相关。当你引用了一个类的对象,该类的
实现了Runnable
扩展了Thread
,并且在该对象内部有一个
Thread.sleep(i)
方法一直在空闲进程时,你可以调用
reference.interupt()
在该引用上,它将触发
中断异常
。下面是一个例子:

在下面的代码中,
Scratch
类的
run
方法进入睡眠状态60000毫秒(或1分钟),如果收到
InterruptedExection
,则打印“我已被中断”。按照编写代码的方式,它不会收到此异常,并且会一直处于休眠状态。但是用
//scratch.interrupt()行再次运行它取消注释并查看发生了什么

public class InterruptedException
extends Exception
这与相关。当您引用了一个类的对象,该类的
实现了Runnable
扩展了Thread
,并且在该对象内,
Thread.sleep(i)
方法一直在使进程空闲时,您可以调用
reference.interupt()
在该引用上,它将触发
中断异常
。下面是一个例子:

在下面的代码中,
Scratch
cl
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();
    }
}