gpt4 book ai didi

java - 如何实现类似 Try to get a value, if null then sleep 一点而不使用 Thread.sleep 的东西?

转载 作者:行者123 更新时间:2023-12-02 01:44:44 25 4
gpt4 key购买 nike

在我的应用程序中的某个时刻,我需要向缓存(即 HashMap)请求一个值。如果该值不存在,我需要稍等一下,然后重试。目前,这是这样实现的:

String result = cache.get(key);

for (int i = 0; result == null; i++) {
try {
Thread.sleep(5);
} catch (InterruptedException e) {

}

result = cache.get(key);
}

虽然它有效,但我有一种感觉,使用 Thread.sleep 有点错误。 JDK 是否为此类任务提供了任何功能?我考虑过使用 ScheduledExecutorService,但问题是它必须在主线程中运行。

最佳答案

我认为你的设计从根本上来说是有问题的。尽管存在锁定和内存可见性问题,但您实际上是在使用高级代码轮询事件。这既不高效也不灵敏。潜伏。

您应该改用更加事件驱动的方法。至少,使用 object monitorlock等待该值被设置,而不是轮询。

更好的是,使用消息总线来注册处理程序并在事件发生时对其进行处理 - 您可以使用任何 BlockingQueue 轻松构建多线程消息总线。实现传递消息对象。

关于java - 如何实现类似 Try to get a value, if null then sleep 一点而不使用 Thread.sleep 的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9500337/

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