gpt4 book ai didi

java - BlockingQueue 中阻塞的线程

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:00 27 4
gpt4 key购买 nike

我有一个容量为 1 的 BlockingQueue。它存储收到的股票的最后价格。价格保留在队列中,直到客户端轮询队列。然后,我有一个名为 getLatestPrice() 的方法,它应该返回股票的最新价格。我的问题是,如果客户端尚未轮询,则最新价格可能不在队列中。它可能位于阻塞线程中。如果被阻止,返回最新价格的最佳解决方案是什么?谢谢。

private final BlockingQueue<PriceUpdate> latest;
private final long pollTimeout = 2;
private TimeUnit pollTimeUnit = TimeUnit.SECONDS;

public SaveListener(int capacity) {
latest = new ArrayBlockingQueue<PriceUpdate>(capacity, true);
}

public void newPrice(PriceUpdate priceUpdate) {
try {
latest.put(priceUpdate);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public PriceUpdate getNewPrice() {
try {
return latest.poll(pollTimeout, pollTimeUnit); }
catch (InterruptedException e) {
return null;
}
}

getLatestPrice() 调用 getNewPrice 但它没有返回任何值,尽管我知道队列中存储了一个值。

最佳答案

使 AtomicReference 保持最新值,它不会阻止更新。

关于java - BlockingQueue 中阻塞的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21211858/

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