正确的put操作可以在并发环境中正常工作?

时间:2019-03-24 18:56:32

标签: java concurrency

在并发环境中是否可以正常工作(没有竞争条件)?

这是一种“密钥自动递增”功能实现。.

private final AtomicInteger atomic = new AtomicInteger(0);
private Map<Long, Integer> hashmap = new ConcurrentHashMap<>();

void put(String value) {
   hashmap.put(atomic.getAndIncrement(), Integer.valueOf(value));
}

我想不是,因为Integer.valueOf没有同步。 谢谢!

1 个答案:

答案 0 :(得分:1)

这里没有同步

Integer.valueOf(value)

value参数是String,这表示它已被复制(不是真的,但认为确实如此)。
A {{1 }}也是不可变的

String是一个不包含状态的纯函数。因此,根据定义,它是线程安全的。
看看这个小片段,您的代码看起来不错。