gpt4 book ai didi

java - 不知道使用什么模式有条件地阻止线程

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

我有一个 Map 对象,该对象可能为 null 或在应用程序首次启动时被清除。我需要所有访问此映射的线程都阻塞,直到映射初始化,然后我才需要向所有线程发出信号以访问此映射。

此映射保存配置数据,除非单个线程决定刷新以加载新的配置数据,否则它将仅供读取(因此,为了性能,它不需要同步,因为我也不觉得有必要)。我尝试对 ReentrantLock 使用 Condition 对象,但每当我尝试 signalAll()await()

这是我需要做的伪代码:

void monitorThread{
while(someCondition){
map = updatedMap();
condition.signalAll();
}
}

String readValueFromMap(String key){
if(map == null){
condition.await();
}
return map.get(key);
}

最佳答案

CountDownLatch 就是您所需要的。

CountDownLatch latch = new CountDownLatch(1); 

在初始化 hashmap 时执行 latch.countdown() 并在线程中使用 latch.await()

void monitorThread{
map = updatedMap();
latch.countDown();
}

String readValueFromMap(String key){
latch.await();
return map.get(key);
}

请注意,CountDownLatch await() 方法仅在倒计时大于 0 时才会等待,因此仅在第一次时等待。

关于java - 不知道使用什么模式有条件地阻止线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12264725/

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