java多处调用多任务_多任务分布式并发处理

1、 不同步,任务入库持久化前一次性分配好,根据一定的规则将任务与主机关联,如前10个给主机1,接下来10个给主机2。。。,每个任务处理时间有不可预知性,导致分配不均,有些主机早早就歇着,有些还在忙碌。

2、 程序同步,主机处理完一个任务主动从任务池里取下一个任务,需要在master主机程序里维持一个队列LinkedBlockingQueue(或PriorityBlockingQueue),任务数据如果过大内存无法一次全部缓存,需要定期往队列补充任务或在队列消耗到某阀值时从数据库补充任务。

3、 数据库同步,利用数据库行锁,参考quartz集群处理

select * from qrtz_locks where LOCK_NAME='job_access' for update

第一个窗口执行后有返回

1cd4e405773d86a07b1a58d282fed545.png

第二个窗口执行后将一直处于等待,等待第一个会话释放锁,先锁住job_access行,等待对job表处理结束提交后,其他主机才可对job表进行操作

e1166839bbe1a21cd771f74aa4f50cd8.png

qrtz_locks表只有一列LOCK_NAME,会话得到锁后从未完任务中任取一个,任务状态设为处理中,然后commit释放锁。

也可利用表的排他锁lock table tabA in exclusive mode

045e3b6bb71f3cc23da45c1435cf9f11.png

fd9a42aca5e6f5fc653cd33ca1ec2f64.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值