gpt4 book ai didi

java - 在执行器框架中同步资源

转载 作者:行者123 更新时间:2023-12-01 11:45:01 24 4
gpt4 key购买 nike

我正在使用执行器框架来执行一项大型任务。我需要统计已完成的进程状态。所以我创建了一个带有计数器的单例类来保持计数。

public class ProgramInitializationTracker {

private static Map<String, Integer> programInitializedTracker = new HashMap<>();
private static ProgramInitializationTracker instance;

private ProgramInitializationTracker(){

}

public static ProgramInitializationTracker getInstance(){
if(instance == null){
synchronized (ProgramInitializationTracker.class) {
if(instance == null){
instance = new ProgramInitializationTracker();
}
}
}
return instance;
}
public Integer getProgramInitializedTracker(String key) {
return programInitializedTracker.get(key);
}

public void setProgramInitializedTracker(String key, int value) {
synchronized (ProgramInitializationTracker.class) {
ProgramInitializationTracker.programInitializedTracker.put(key, value);
}
}
}

但问题是仅通过同步 set 方法并不能真正确保我具有正确的计数值。据我所知,可以实现多线程。使 get 函数也同步会对我有帮助。如果不是,那么我应该做什么才能使其正确。

最佳答案

当 Java 已经为您提供了对集合的线程安全访问时,您不应该尝试实现自己的线程安全访问。

您应该使用 ConcurrentHashMapget 之类的读取不会阻塞。

但是您不应该使用 Integer 类型作为存储在映射中的值,而应该使用 AtomicInteger ,这将确保尝试修改与同一键关联的值的多个线程是线程安全的。

关于java - 在执行器框架中同步资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29218739/

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