首页 > 解决方案 > 在第一个线程完成执行之前,线程使用的映射中的强制元素不应被另一个线程使用

问题描述

我有一张地图说

HashMap<String, String> init = new Hashmap<String, String>

地图有 3 个元素。[("one","alpha"),("two","beta"),("three","theta")]

现在我必须并行运行五个线程,使用上面映射中的任何对,以便新线程只能使用空闲对。

我的意思是,没有两个并行运行的线程应该具有相同的值对。需要强制执行任何线程正在运行,该线程使用的值对不应被另一个线程同时使用

映射具有值池,其中任何空闲的对都应分配给线程

标签: javaseleniumtestng

解决方案


我认为更好的解决方案是Map用 a替换BlockingQueue并使用自定义类型来表示对/元组。

  • 您使用并发队列类型实例化队列并使用所有对/元组填充它。
  • 每个线程从队列的前面获取一对,如果没有可用则阻塞。
  • 当线程完成时,它将对添加到队列的后面。

同步发生在Queue::take操作中。

这种设计确保两个线程不会同时使用任何对。


推荐阅读