我有一个地图说
HashMap<String, String> init = new Hashmap<String, String>
,地图包含3个元素。 [(“ one”,“ alpha”),(“ two”,“ beta”),(“ three”,“ theta”)]
现在我必须并行运行五个线程,使用上面映射中的任何一对,以便新线程只应使用空闲对。
我的意思是,并行运行的两个线程都不应该具有相同的一对值。 需要强制执行任何正在运行的线程,该线程使用的一对值不应同时被另一个线程使用
地图具有值池,并且其中的任何空闲对都应分配给线程
答案 0 :(得分:1)
我认为更好的解决方案是将Map
替换为BlockingQueue
,并使用自定义类型来表示对/元组。
通过Queue::take
操作进行同步。
这种设计可确保两个线程不会同时使用任何对。
答案 1 :(得分:0)
当一个线程选择使用它时,您可以从Map中删除每个元素。 因此,您将需要使用Hashtable而不是Hashmap,这样,当多个线程同时对其进行修改时,就不会有问题。 (哈希表已同步,而HashMap未同步。)
Map<String, String> init = new Hashtable<String, String>()
PS:始终将相应的接口用于变量定义,以便您可以在需要时交换特定的类