我试图理解方法参数的用途:LockSupport::parkUntil。让我举一个例子来说明我的意思:
public static void main(String[] args) {
Object blockedOn = new Object();
System.out.println(blockedOn.hashCode());
Thread parked = new Thread(() -> {
System.out.println("parking the thread");
long howMuch = System.currentTimeMillis() + 5 * 1000;
while (System.currentTimeMillis() < howMuch) {
LockSupport.parkUntil(blockedOn, howMuch);
}
System.out.println("parked the thread");
});
parked.start();
sleepOneSecond();
Object on = LockSupport.getBlocker(parked);
System.out.println(on.hashCode());
}
private static void sleepOneSecond() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}其实有几个问题,如果有人想帮助我理解这一点。首先,是while loop,我没有看到任何其他方法来摆脱(来自LockSupport::parkUntil的文档):
虚假调用(即,无缘无故)返回。
因此,我只能假设LockSupport::parkUntil可以毫无原因地失败;因此,我不得不将其包装到一个循环中。
下一个问题是,blockedOn参数的用途是什么?我明白,等得够久,我可以:
Object on = LockSupport.getBlocker(parked);即:找出我被封锁的对象的当前状态,并以某种方式对此做出反应。我在想,我可以中断阻塞的线程(当然,它必须支持中断),但是还有其他原因吗?
https://stackoverflow.com/questions/61016072
复制相似问题