一个线程打开一个资源,这是一个阻塞操作。如果成功,则线程需要再次关闭它,这又是阻塞的,但总是在有限的时间内成功。
可以使用一个标志(我们称之为它hasResource
),它不能以任何方式与其他线程同步,以表明该线程不想被中断。根本不允许其他同步。
以下是处理这种情况的安全方法吗?
@Override // we're subclassing Thread
public void run () {
try {
while (!interrupted ()) {
blockingOpen ();
// glitch possibility in this line
hasResource = true;
blockingClose ();
hasResource = false;
}
}
catch (final InterruptedException e) {
interrupt ();
}
}
特别是,这是否确保线程在拥有资源时不会被中断?
据我所知,只有一个错误机会窗口,即在打开之后和设置标志之前。但是,这似乎不会导致资源泄漏,而是会意外忽略中断请求。有可能防止这种情况吗?