扩展Thread时吞下异常

时间:2016-10-10 09:02:08

标签: java concurrency

JCIP第5章 -

  

唯一可以接受中断的情况   当你扩展Thread并且因此控制所有代码   在呼叫堆栈上更高

请用粗体详细说明。怎么样?

1 个答案:

答案 0 :(得分:0)

在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不是。