java - 在第一个线程完成执行之前,线程使用的映射中的强制元素不应被另一个线程使用
问题描述
我有一张地图说
HashMap<String, String> init = new Hashmap<String, String>
地图有 3 个元素。[("one","alpha"),("two","beta"),("three","theta")]
现在我必须并行运行五个线程,使用上面映射中的任何对,以便新线程只能使用空闲对。
我的意思是,没有两个并行运行的线程应该具有相同的值对。需要强制执行任何线程正在运行,该线程使用的值对不应被另一个线程同时使用
映射具有值池,其中任何空闲的对都应分配给线程
解决方案
我认为更好的解决方案是Map
用 a替换BlockingQueue
并使用自定义类型来表示对/元组。
- 您使用并发队列类型实例化队列并使用所有对/元组填充它。
- 每个线程从队列的前面获取一对,如果没有可用则阻塞。
- 当线程完成时,它将对添加到队列的后面。
同步发生在Queue::take
操作中。
这种设计确保两个线程不会同时使用任何对。
推荐阅读
- python - 打印一定数量的项目后需要停止打印 Counter()
- c# - 具有 List 类型的两个列表所需的具有方法语法的 Linq 查询
- c# - ASP.NEТ MVC 5 复选框/单选按钮绑定在行动
- javascript - 这个错误重要吗?不受控到受控的组件
- javascript - Using dynamic html in javascript file
- node.js - nodejs 在我的 BeagleBone Green 上安装问题
- php - 如何创建仅密码登录表单?
- javascript - 添加额外的顶部 .offset()
- javascript - 以反应原生形式处理键盘的最佳方法是什么?我的一直隐藏/显示并分散注意力
- c# - Generating .NET Core Console App .exe in Visual Studio 2017