Master-Worker模式 多线程设计模式
来源:互联网 发布:阿里云 网站负责人 编辑:程序博客网 时间:2024/05/19 17:59
Master-Worker模式 多线程设计模式
常用的并行计算模式。它的核心思想是系统由两类进程协作工作:Master-Worker进程。Master负责接收和分配任务,Worker负责处理子任务。当各个Worker子进程处理完成后,会将结果返回给Master,由master做归纳和总结。大任务分解小任务,并行执行。
public class Main { public static void main(String[] args) { Master master = new Master(new Worker(), 5); for(int i = 0; i<10; i++){ Task task = new Task(); task.setId(i); task.setName("任务"+i); master.submit(task); } master.execute(); while(true){ if (master.isComplete()) { break; } } ConcurrentHashMap<String, Object> resultMap = master.getResultMap(); for(Map.Entry<String, Object> me : resultMap.entrySet()){ System.out.println(me.getKey() + " " + me.getValue()); } }}public class Master { private ConcurrentLinkedQueue<Task> workQueue = new ConcurrentLinkedQueue<>(); private Map<String, Thread> workers = new HashMap<>(); private ConcurrentHashMap<String, Object> resultMap = new ConcurrentHashMap<>(); public ConcurrentHashMap<String, Object> getResultMap() { return resultMap; } public void setResultMap(ConcurrentHashMap<String, Object> resultMap) { this.resultMap = resultMap; } public Master(Worker worker, int workerCount) { worker.setWorkQueue(this.workQueue); worker.setResultMap(this.resultMap); for (int i = 0; i < workerCount; i++) { //key表示每一个worker的名字,value表示线程执行对象 workers.put("子节点" + i, new Thread(worker)); } } public void submit(Task task){ this.workQueue.add(task); } public void execute(){ for (Map.Entry<String, Thread> me : workers.entrySet()) { me.getValue().start(); } } public boolean isComplete() { for (Map.Entry<String, Thread> me : workers.entrySet()) { if (me.getValue().getState() != Thread.State.TERMINATED) { return false; } } return true; }}public class Worker implements Runnable{ private ConcurrentLinkedQueue<Task> workQueue; private ConcurrentHashMap<String, Object> resultMap; public void setWorkQueue(ConcurrentLinkedQueue<Task> workQueue) { this.workQueue = workQueue; } public void setResultMap(ConcurrentHashMap<String, Object> resultMap) { this.resultMap = resultMap; } @Override public void run() { while(true){ Task input = this.workQueue.poll(); if (null == input) break; Object output = handle(input); this.resultMap.put(Integer.toString(input.getId()), output); } } private Object handle(Task input) { Object output = null; try { Thread.sleep(500); output = input.getName(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return output; }}public class Task { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
0 0
- 多线程设计模式-- Master-Worker模式
- Master-Worker模式 多线程设计模式
- 多线程设计模式(Future/Master-Worker)
- Master-Worker设计模式
- Master-Worker设计模式
- java 多线程 master worker模式
- 并行设计模式-Master/Worker
- 并行设计模式-Master/Worker
- Master worker并行设计模式
- 多线程学习之路-学习master-worker设计模式
- 多线程模式之Master-Worker模式
- 并发设计模式之Master-Worker模式
- 通过多线程模拟实现Master-Worker模式
- 多线程之Master-Worker工作模式学习
- 多线程——worker-master模式
- 多线程编程中的Master-Worker模式
- 多线程master-worker设计
- 架构之路--多线程下的设计模式 Master worker并行计算模式
- python包的管理(添加的3种方式 删除包)
- Java 程序里的内存泄漏
- 打印网站指定节点内的内容
- 欢迎使用CSDN-markdown编辑器
- [数据结构]02-线性结构1 两个有序链表序列的合并
- Master-Worker模式 多线程设计模式
- Java 基本数据类型
- rdd数据类型的探索
- eclipse Unhandled event loop exception No more handles 问题解决
- windows下模拟高并发来进行负载测试
- Android图片轮播
- 不法分子正大量滥用苹果iOS企业证书打包非法App
- 6.用两个栈来实现一个队列,完成队列的Push和Pop操作
- 关于hibernater找不到表