Mou*_*inX 6 java multithreading notify wait
首先,这是一个近乎重复的: 如何区分等待(长时间超时)退出通知或超时?
但这是一个新的后续问题.
有这个等待声明:
public final native void wait(long timeout) throws InterruptedException;
Run Code Online (Sandbox Code Playgroud)
它可以通过InterruptedException或超时退出,或者因为在另一个线程中调用Notify/NotifyAll方法,Exception很容易捕获但是...
我的代码绝对需要知道退出是从超时还是通知.(将来,这段代码需要重新设计,但现在无法完成.所以我需要知道退出等待的原因.)
具体来说,有人可以给出一个使用ThreadLocal布尔值的例子,该布尔值仅在notify()上设置为true,并且所有这些都在现有循环中,如下所示?(这或多或少是另一个线程中接受的答案,但没有给出具体的代码示例.我不熟悉Java,所以我需要一个特定的代码示例 - 理想情况下在下面的现有代码的上下文中.)
public synchronized int getLastSequenceNumber() {
while (empty) {
try {
wait(waitTimeValue);
} catch (InterruptedException e) {}
}
empty = true;
return reportedSequenceNumber;
}
public synchronized void reconcileLastSequenceNumber(int sequenceNumber) {
empty = false;
this.reportedSequenceNumber = sequenceNumber;
notifyAll();
}
Run Code Online (Sandbox Code Playgroud)
布尔"空"用于我在这里询问的特定问题之外的目的.我相信我需要添加另一个布尔值来满足原始问题的建议答案.我如何将提议的解决方案集成到上面的现有代码片段中?谢谢.
| 归档时间: |
|
| 查看次数: |
8232 次 |
| 最近记录: |