听起来你需要每个调度ID的FIFO排序,所以理想的情况是将调度队列作为抽象.这可以解释你对哈希关注不能提供统一分布的担忧,因为一些调度队列可能比其他队列更活跃,并且在工人之间不公平地平衡.通过将队列与worker分开,您可以保留FIFO语义并均匀地分散工作.

提供此抽象的非活动库是HawtDispatch.它与Java 6兼容.

一种非常简单的Java 8方法是使用CompletableFuture作为排队机制,使用ConcurrentHashMap进行注册,使用Executor(例如ForkJoinPool)进行计算.有关此想法的实现,请参阅EventDispatcher,其中注册是明确的.如果您的调度员更具动态性,那么您可能需要定期修剪地图.基本思路如下.

ConcurrentMap> dispatchQueues = ...

public CompletableFuture dispatch(String queueName, Runnable task) {

return dispatchQueues.compute(queueName, (k, queue) -> {

return (queue == null)

? CompletableFuture.runAsync(task)

: queue.thenRunAsync(task);

});

}

更新(JDK7)

上述想法的后端将与番石榴翻译成类似的东西,

ListeningExecutorService executor = ...

Striped locks = Striped.lock(256);

ConcurrentMap> dispatchQueues = ...

public ListenableFuture> dispatch(String queueName, final Runnable task) {

Lock lock = locks.get(queueName);

lock.lock();

try {

ListenableFuture> future = dispatchQueues.get(queueName);

if (future == null) {

future = executor.submit(task);

} else {

final SettableFuture next = SettableFuture.create();

future.addListener(new Runnable() {

try {

task.run();

} finally {

next.set(null);

}

}, executor);

future = next;

}

dispatchQueues.put(queueName, future);

} finally {

lock.unlock();

}

}

java多数据库开发evn,Java,在多线程evnironments中通过散列统一划分传入的工作相关推荐

  1. 数据库开发技术java方向_Java开发工程师(Web方向) - 03.数据库开发 - 第5章.MyBatis...

    第5章--MyBatis MyBatis入门 Abstract: 数据库框架的工作原理和使用方法(以MyBatis为例) 面向对象的世界与关系型数据库的鸿沟: 面向对象世界中的数据是对象: 关系型数据 ...

  2. php java优劣_PHP开发和JAVA开发网站的优劣对比

    PHP开发和JAVA开发网站的优劣对比有哪些?该篇文章由川软教育君整理并编辑: 1.开发网站最好选用一个比较成熟.资料比较多的CMS,因为自己开发后台工作量也不小,JAVA的CMS比PHP要少很多,所 ...

  3. Java并发编程(8):多线程环境中安全使用集合API(含代码)

    在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...

  4. java上位机开发(java基础)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] java基础就是把java环境安装好,把基础程序构建起来.至少说让开发的同学来说有一点信心.从这 ...

  5. java删除数据库表格,《Java:数据库更新excel文件的数据同时删除数据库原来的数据》 excel表格如何删除相同数据库...

    Java:数据库更新excel文件的数据同时删除数据库原来的数据 重新写入blob的byte[],就可以覆盖了....... excel表格怎么检查有重复的数据库 方/步骤 打开需要编辑的Excel表 ...

  6. SQL2K数据库开发七之表操作添加删除和修改列

    1.在已有的表中添加.删除和修改列可以使用Transact-SQL中的ALTER TABLE语句,使用ALTER TABLE语句的语法为: 2.在SQL Server查询分析器中输入如下语句,往Pro ...

  7. java大数据开发训练营--Java Web 后端技术基础(上)

    题记: 文章内容输出来源:拉勾教育大数据开发高薪训练营 本篇文章是java学习课程中的一部分笔记. 本博文主要是记录一些基础的知识点,通过实操更容易理解 这章主要讲的是JAVA Web后端基础 一 W ...

  8. Java微服务开发指南-Java环境下的微服务

    本文涉及的内容,能让你学到什么? 本书适用于开发微服务的Java开发人员和架构师.我们在开始介绍微服务架构前,先讲述一些抽象的基本概念.不幸的是,使用新技术并不能神奇地解决分布式系统问题.但是我们通过 ...

  9. Java微服务开发指南 -- Java环境下的微服务

    Java环境下的微服务 本文涉及的内容,能让你学到什么? 本书适用于开发微服务的Java开发人员和架构师.我们在开始介绍微服务架构前,先讲述一些抽象的基本概念.不幸的是,使用新技术并不能神奇地解决分布 ...

  10. java无框架开发,DON: java 小型web项目快速开发框架,实现无配置,直接关注业务开发.主要解决请求分发解析...

    #DON框架介绍 ##目标 启动零配置快速进入开发 开发时,请求controller路由零配置 配合windfly.jar工具包快速开发 最终实现加入jar包即可快速开发 ##主要特点 无需配置请求u ...

最新文章

  1. java c 序列化_Java 序列化
  2. [LeetCode] Implement strStr()
  3. 一起学nRF51xx 17 -  lpcomp
  4. Python入门100题 | 第078题
  5. Jquery中实现表单提交前的校验
  6. MCtalk对话学吧课堂:真正的K12在线教育才刚刚开始
  7. JavaScript函数节流和函数防抖
  8. html css 前端实现消息提醒数_自学的福音,web前端学习全套视频教程+最新学习思维导图都在这里...
  9. php中数组生成下拉选项,php数组生成html下拉列表的方法
  10. Java并发编程之线程安全性分析之原子性、可见性、有序性
  11. maven install 安装项目问题总结An unknown compilation problem occurred
  12. python刚出来多少薪资-2019 年Python工程师的平均薪资是多少?
  13. Django之路第四篇:Models
  14. Paraview快捷键操作
  15. java面向接口编程思想
  16. 基于Nginx,搭建HLS(HTTP Live Streaming)server,点播直播
  17. 小米手机qq不读取相册照片_【qq影像读取不了照片】qq影像读取不到相册_qq影像读取不了相册...
  18. react实现表头固定左侧,内容右侧循环,可换行
  19. Unity 多人签名
  20. 福晟集团用创新理念引领发展新趋势

热门文章

  1. C++的64位整数[转]+gyy整理
  2. 微信浏览器唤起微信登录
  3. linux上删除rime方案_Linux中Rime输入法安装使用小结
  4. 牛客网——找出直系亲属
  5. 笔记本电脑怎么打不开计算机,笔记本电脑打不开了怎么办
  6. 子域名在线查询网站推荐
  7. Rust的crate
  8. POJ 3295 Tautology(构造)
  9. 《MATLAB语音信号分析与合成(第二版)》:第5章 带噪语音和预处理
  10. Routing Congestion