[英]how to concurrently put an element (might exist) without lock in ConcurrentHashMap?
我正在编写一个简单的消息队列程序,并且有多个生产者和多个序列化器 (现在不考虑使用消费者)。 生产者通过使用String queueName
指定要向其发送消息的队列。 而且串行器只能在发送过程中初始化,因为直到运行,队列的确切数目/名称才知道。 由于我必须使用地图,因此我认为我可以使用
我想避免使用显式锁,所以我选择ConcurrentHashMap。 但是,使用ConcurrentHashMap
并不意味着我的程序ConcurrentHashMap
是线程安全的, containsKey()
和put()
之间的空闲状态可能会引起混乱。 因此,我考虑使用其putIfAbsent()
方法。
但是,当我调用putIfAbsent(queuename, new MySerializer())
,我发现每次我调用putIfAbsent时,它都会创建MySerializer
的新实例。 但是,如果我不使用putIfAbsent
,则必须使用诸如锁之类的东西。
我的问题是如何在避免同时使用锁的同时向ConcurrentHashMap中添加元素?
Java 8向Map
接口添加了新方法,这些方法允许延迟评估潜在的新值。 例如:
map.computeIfAbsent(queuename, MySerializer::new);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.