我有两个线程;任务线程,背景线程。
TaskThread 在“接收数据”信号量上阻塞。
synchronized (receiveSemaphore) {
while (!dataIsReady) {
try {
receiveSemaphore.wait();
} catch (InterruptedException e) {
}
}
...
}
BackgroundThread 通知所有等待“接收数据”信号量的线程
receiveSemaphore.notifyAll();
不幸的是,在生活中,事情有时会出错,BackgroundThread 永远不会执行通知等待线程的语句。当用户厌倦了等待时,如何取消?
我的 JavaFX2 UI 上有一个“取消”按钮 - 但是接下来呢?在 JavaFX2 中,显示的唯一示例有一个线程在循环中运行并检查 isCancelled() 标志。
http://docs.oracle.com/javafx/2/api/javafx/concurrent/Task.html
同样,如果任务线程本身被阻塞,那么它怎么能从那里取消呢?