博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Master-work模式
阅读量:6519 次
发布时间:2019-06-24

本文共 3330 字,大约阅读时间需要 11 分钟。

hot3.png

①.master负责手机客户端的请求,将任务分发给work,回收work处理结果,

②.work做具体的业务逻辑,并将结果通知到master

这里做了一个给每个员工涨薪30%,并计算需要支付的薪资

具体实现:

master:

private LinkedBlockingQueue
queue = new LinkedBlockingQueue
(); private ConcurrentHashMap
resultMap = new ConcurrentHashMap
(); private HashMap
workeMap = new HashMap
(); public Master(Work work, Integer workerCount) { if (workerCount <= 0) return; work.setQueue(queue); work.setResultMap(resultMap); for (int i = 0; i < workerCount; i++) { workeMap.put(i, new Thread(work, "T" + (i + 1))); } } public void putWorker(Money m) throws Exception { if (m == null) return; queue.add(m); } /** * 启动所有工作进程 */ public void startWorker() { for (Map.Entry
entry : workeMap.entrySet()) { if(entry.getValue().getState() == Thread.State.NEW){ entry.getValue().start(); } } } /** * 每人工资涨薪30%,计算应付总额 * * @return */ public double sum() { double sum = 0; for (Map.Entry
entry : resultMap.entrySet()) { sum += entry.getValue().getMoney(); } return sum; } /** * 所有工作线程是否都完毕 * * @return */ public boolean isCompleted() { for (Map.Entry
entry : workeMap.entrySet()) { if (entry.getValue().getState() != Thread.State.TERMINATED) return false; } return true; }

work(可根据需要自行扩展):

private LinkedBlockingQueue
queue = new LinkedBlockingQueue
(); private ConcurrentHashMap
resultMap = new ConcurrentHashMap
(); @Override public void run() { try { while (true) { Thread.sleep(3000); Money money = this.queue.poll(); if (money == null) break; double nowMoney = money.getMoney() + (money.getMoney() * 0.3); System.out.println("工号:" + money.getId() + ",原工资:" + money.getMoney() + ",现工资:" + nowMoney + ",当前工作work:" + Thread.currentThread().getName()); money.setMoney(nowMoney); resultMap.put(money.getId(), money); } } catch (InterruptedException e) { e.printStackTrace(); } }

测试:

Master m = new Master(new Work(),5);		m.putWorker(new Money("E1234567891", 2000.00));		m.putWorker(new Money("E1234567892", 1500.00));		m.putWorker(new Money("E1234567893", 6000.00));		m.putWorker(new Money("E1234567894", 4500.00));		m.putWorker(new Money("E1234567895", 2200.00));		m.putWorker(new Money("E1234567896", 3000.00));		m.putWorker(new Money("E1234567897", 5000.00));		m.putWorker(new Money("E1234567898", 7000.00));		m.putWorker(new Money("E1234567899", 6500.00));		m.putWorker(new Money("E1234567810", 2200.00));		m.startWorker();		long startTime = System.currentTimeMillis();		while (true) {			if (m.isCompleted()) {				System.out.println("结算总金额:" + m.sum() + "耗时:"				        + (System.currentTimeMillis() - startTime) + " ms");				break;			}		}

控制台日志:

工号:E1234567893,原工资:6000.0,现工资:7800.0,当前工作work:T4工号:E1234567894,原工资:4500.0,现工资:5850.0,当前工作work:T1工号:E1234567891,原工资:2000.0,现工资:2600.0,当前工作work:T2工号:E1234567892,原工资:1500.0,现工资:1950.0,当前工作work:T5工号:E1234567895,原工资:2200.0,现工资:2860.0,当前工作work:T3工号:E1234567896,原工资:3000.0,现工资:3900.0,当前工作work:T2工号:E1234567899,原工资:6500.0,现工资:8450.0,当前工作work:T1工号:E1234567810,原工资:2200.0,现工资:2860.0,当前工作work:T5工号:E1234567898,原工资:7000.0,现工资:9100.0,当前工作work:T3工号:E1234567897,原工资:5000.0,现工资:6500.0,当前工作work:T4结算总金额:51870.0耗时:9001 ms

 

转载于:https://my.oschina.net/u/2486137/blog/1547883

你可能感兴趣的文章
护城河加速坍塌 ,SaaS领域正面临资本出逃?
查看>>
LINUX 常用命令整理
查看>>
【云周刊】第134期:阿里云发布ECS企业级产品家族 19款实例族涵盖173个应用场景...
查看>>
iOS 位枚举
查看>>
关注ERP之根,基础数据的准备
查看>>
2015年全球专业视频监控市场增长暴跌仅为1.9%
查看>>
中兴计划2017年泰国收入实现50%的增长
查看>>
德国禁止Facebook利用WhatsApp用户信息:没法律基础
查看>>
全球太阳能产业掣肘在哪儿?
查看>>
“灾备全生态”全揭秘
查看>>
大数据助力新乡旅游走向智慧发展
查看>>
华为不顾脸面自曝“黑幕”:系统性公开反省十大内耗难题
查看>>
互联网之下 安防行业市场还远远没有触及天花板
查看>>
极进网络将收购斑马技术的无线局域网业务并获蓝筹客户
查看>>
无人零售掀起识别技术风潮,但它真的安全值得信赖吗?
查看>>
如何为物联网和大数据项目分配IT资源
查看>>
Mellanox推出新InfiniBand路由器产品线
查看>>
沈阳大数据发展计划:将于2018年年底计划建成智慧城市统一平台
查看>>
这家以色列公司宣称能破解任何智能手机 iPhone 7也不例外
查看>>
浙江光普太阳能引进第三条光伏产品生产线冲击4亿元产值
查看>>