gpt4 book ai didi

java - 在同步方法内等待信号量

转载 作者:行者123 更新时间:2023-12-02 04:26:41 27 4
gpt4 key购买 nike

我们有类似的东西:

public class TaskExecutor extends Thread {    
private static Semaphore globalStackLocker;

private synchronized Object popFromGlobalStack() {
//do something
try {
globalStackLocker.acquire();
} catch (InterruptedException e) {}
}
//somwhere here are methods that allow to release semaphore
}

这个想法是我有同步方法,并且我检查里面的信号量。如果该信号量被锁定,则该线程将等待它解锁。

问题是——在他等待的时候,synchronized方法会不会被其他线程解锁呢?

对我来说,"is"——一个线程仍在等待,因此另一个线程可以尝试执行此方法。事实上,我找到了一些似乎证明这一点的答案,但我想确定一下。

<小时/>

好的,我明白了。如果我使用 .wait() 而不是信号量怎么办?有同样的问题吗?

public class MyClass() extends Thread {
private static Object lock;
private synchronized void myPop() {
//do something with shared memory (that's why I need synchronize)
try { lock.wait() } catch (InterruptedException e) {}
}
}

一个同步方法中可以有多个线程在等待吗?或者也许我应该在我的方法中使用同步块(synchronized block)? (在“做某事”部分)

最佳答案

不,不会:由于同步,其他线程将在同一个TaskExecutor实例上阻塞.

由于您有一个静态信号量,因此不需要同步,因为您的信号量确保了更强的约束:线程不仅在同一个TaskExecutor上阻塞> 但全局范围内(只要信号量的获取/释放等价同步)

关于java - 在同步方法内等待信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060720/

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