gpt4 book ai didi

java - Semaphore(int permits, boolean fair),fairness到底是做什么的?

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

如果信号量上没有可用的许可,我需要实现一个 FIFO 队列。我的教授指定在考试期间我们将只能使用 acquire()release() 方法。我的想法是使用 tryAcquire() 方法实现一个 LinkedList,如果结果为 false,则将 currentThread 添加到列表的底部。无法使用我搜索过的 tryAcquire() 方法,我注意到了这个构造。例如,如果我初始化一个信号量:

Semaphore example = new Semaphore(5, true);

如果一个线程试图在一个已用尽许可的信号量上使用 acquire() 方法会发生什么?它会自动创建队列吗?我必须以任何方式处理它还是自动处理?

最佳答案

Java 文档不是以这种方式显示的吗?

它表示调用acquire 的线程将被阻塞,直到获得许可为止,而tryAcquire 将返回false——这意味着没有许可,但是调用此方法的线程不会阻塞。

公平是相关的。如果已经有等待线程,但您通过当前线程tryAcquire,它将忽略公平性并获得该许可。由于不允许您使用它,因此公平 是您正在寻找的 FIFO 队列。从字面上看来自文档:

When fairness is set true, the semaphore guarantees that threads invoking any of the acquire methods are selected to obtain permits in the order in which their invocation of those methods was processed (first-in-first-out; FIFO)

如果有阻塞的线程,解除阻塞的两种方法是通过 release 添加许可或中断线程 - 我认为您不想这样做。

关于java - Semaphore(int permits, boolean fair),fairness到底是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48401242/

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