2 つのスレッドがあります。TaskThread、BackgroundThread。
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
繰り返しますが、タスク スレッド自体がブロックされている場合、どうすればそこからキャンセルできますか?