我知道LockSupport是JDK的一部分,但我想知道下面的實現是否在語義上是正確的。觀察Object.wait可以處理線程中斷的問題。我的問題不在於表現;不過,只要您的解決方案只使用基本架構(如等待,通知和同步),我將非常感謝任何改進我的解決方案的建議。我可以在純Java中實現park/unpark方法嗎?
非常感謝。
final class LockSupport {
static void park(long time) {
Thread th = Thread.currentThread();
if (th instanceof MyThread) {
MyThread h = (MyThread)th;
synchronized (h.obj) {
if (h.permit) {
h.permit = false;
return;
}
try {
h.obj.wait(time);
} catch (InterruptedException e) { }
}
}
}
static void unpark(MyThread h) {
synchronized (h.obj) {
h.permit = true;
h.obj.notify();
}
}
}
abstract class MyThread extends Thread {
public Object obj = new Object();
public boolean permit = true;
}
你應該等待一個循環來處理虛假喚醒。 – assylias 2013-02-27 23:27:44
不,該文件指出園區可能因虛假情況而返回。 – 2013-02-28 09:37:17