我知道 LockSupport 是 JDK 的一部分,但我想知道下面的实现在语义上是否正确。观察 Object.wait 可以处理线程中断的问题。我的问题与性能无关。但是,只要您的解决方案仅使用基本结构,如等待、通知和同步,我将不胜感激任何改进我的解决方案的建议。
非常感谢。
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;
}