gpt4 book ai didi

java - 使用什么阻塞对象?

转载 作者:行者123 更新时间:2023-11-29 05:36:32 24 4
gpt4 key购买 nike

我需要一个阻塞对象来触发一些事件。一个(单个)消费者应该等待触发发生。然后它会做一些事情。然后它再次等待触发。触发器由多个不同的线程(生产者)激活。但是生产者不产生任何数据。这种触发器的语义是:“消费者必须做某事”(例如重新计算一些值,因为底层数据发生了变化)。这意味着即使触发器被多次激活,它也应该作为单个触发器出现在消费者面前。

我考虑过使用 CountDownLatchArrayBlockingQueue , 但它们似乎不合适。

这是我想使用的触发器结构:

public class Trigger{
private final MagicBlockingObject blockingLatch;

public void trigger(){
//activate the blockingLatch, so that a call to waitForTrigger() returns
}

public void waitForTrigger(){
//read from the blockingLatch. This should block until trigger() is called.
}
}

对于 MagicBlockingObject 使用什么有什么想法吗?

BlockingQueue 似乎是合适的,但我没有找到一种方法将其限制为单个内容对象而不阻塞生产者,如果队列已满。

最佳答案

您可以使用容量为 1 的 ArrayBlockingQueue 解决此问题:

public class Trigger{
private final ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<>(1);

public void trigger(){
queue.offer("foo");
}

public void waitForTrigger(){
queue.take();
}
}

关于java - 使用什么阻塞对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19381136/

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