扩展线程以测试连接是否正确终止



Java并发实践,12.1.2。测试阻塞操作:

void testTakeBlocksWhenEmpty() {
final BoundedBuffer<Integer> bb = new BoundedBuffer<Integer>(10);
Thread taker = new Thread() {
public void run() {
try {
int unused = bb.take();
fail(); // if we get here, it’s an error
} catch (InterruptedException success) { }
}
};
try {
taker.start();
Thread.sleep(LOCKUP_DETECT_TIMEOUT);
taker.interrupt();
taker.join(LOCKUP_DETECT_TIMEOUT);
assertFalse(taker.isAlive());
} catch (Exception unexpected) {
fail();
}
}

这是少数适合子类化的情况之一显式线程而不是在池中使用Runnable:为了使用join测试是否正确终止。同样的方法可以用于测试在将元件放入按主线程排队。

但我看不出扩展Thread对测试有什么帮助。对我来说,通过RunnableThread似乎也可以进行同样的测试。有人能解释一下吗?

这是少数适合子类化的情况之一显式线程而不是在池中使用Runnable:以便使用join测试是否正确终止

换句话说,这种方法让您有机会中断测试线程并加入它,以确保它已正确终止。如果使用-ThreadPoolExecutor类,则不能以这种方式处理线程。

此外,可以创建一个新线程,用Runnable启动它,比如Thread taker = new Thread(() -> {...});。请记住,这本书是在大约8年前写的,创建Runnable而不是Thread的子类会使这个例子更长。

最新更新