gpt4 book ai didi

java - 我可以用纯 Java 实现 park/unpark 方法吗?

转载 作者:搜寻专家 更新时间:2023-11-01 03:25:27 26 4
gpt4 key购买 nike

我知道 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;
}

最佳答案

初始许可应该是假的。

当捕获到中断时,需要重新中断当前线程

 catch (InterruptedException e) { th.interrupt(); }

因为如果 park() 因中断而返回,则应设置中断状态(参见 javadoc 示例)

wait() 完成后,正常或突然中断,消耗许可。

unpark()中,如果permit已经为真,则不需要通知。

关于java - 我可以用纯 Java 实现 park/unpark 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15123611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com