gpt4 book ai didi

java - 信号量锁的正确实现?

转载 作者:行者123 更新时间:2023-11-30 03:52:25 27 4
gpt4 key购买 nike

我不确定以下实现是否正确。我的原因是,如果当前线程在等待收到信号时被中断,则 finally block 将被调用,但因为它没有持有锁,所以 IllegalMonitorStateException将被抛出。我是否实现了 try-finally在这种情况下正确阻止还是应该实现?

  public void acquire() throws InterruptedException {
try {
lock.lockInterruptibly();
while (permits == 0) {
condition.await();
}
permits--;
}
finally {
lock.unlock();
}
}

最佳答案

不确定我是否正确理解问题,但您应该在分配资源后才尝试最终

  public void acquire() throws InterruptedException {
lock.lockInterruptibly(); // allocate resource before try
try {
while (permits == 0) {
condition.await();
}
permits--;
}
finally {
lock.unlock();
}
}

我不知道为什么所有学校都这样做,例如Sun's official page on finally ,建议在 try 内进行分配(这样您就需要在 finally 子句中使用 if(allocated) {release})。在我看来,这是愚蠢的。为什么大家都建​​议配置里面试试?

关于java - 信号量锁的正确实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087573/

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