扩展Thread时吞噬异常



JCIP中的第5章-

唯一可以接受中断的情况是在扩展Thread时,因此控制所有代码调用堆栈的更高层

请用粗体字详细说明这个部分。怎样

在Java上,每个线程都有自己的堆栈,一个方法被称为添加新框架。

您可以通过扩展Thread类来创建自己的线程:

class MyThread extends Thread {
    public void run() {
        System.out.println("MyThread");
        // Interruption 1 
    }
}

线程堆栈是:

|堆栈|
|---------------|
|运行|

或者,如果你写了一个库,一个不是你创建的外部线程会调用你的库:

class MyLib {
    public void doSomething() {
        System.out.println("MyThread");
        // Interruption 2
    }
}

在外部线程内:

...
MyLib myLib = new MyLib();
myLib.doSomething();
...

您的代码调用方式如上。

在这种情况下,

|堆栈|
|------------------|
|其他方法|
|其他方法|
|其他方法|
|doSomething|

并且您不能直接控制调用您的代码的代码。some other method在调用堆栈上处于较高的位置。

所以吞咽中断1可以,但中断2不行。

最新更新