多线程设计模式之Master-worker模式

36套java进阶高级架构师视频+38套大数据视频  保证全是硬货需要的

+微信:

du13797566440


多线程设计模式之Master-worker模式_第1张图片多线程设计模式之Master-worker模式_第2张图片

/**
 * 主程序,创建初始化任务,开始任务,判断线程是否都执行完毕,获取结果
 *
 */
public class main {

public static void main(String[] args) {
master master = new master(3);//创建一个消息转发器master, 初始化3个消息处理器worker
master.submit(100); //提交100个任务
master.excute();//执行renwu

while (true) {
//判断任务是否都执行完毕
boolean complete = master.isComplete();
if(complete){
ConcurrentHashMap results = master.getResults();
for (Entry rel: results.entrySet()) {
System.out.println(rel.getKey()+"-----"+rel.getValue());
}
break;
}
}
}
}



/**
 * @author 
 * 一个 worker 就是一个线程
 */
public class master {
private ConcurrentLinkedQueue tasks=new ConcurrentLinkedQueue(); //要执行的任务参数
private ConcurrentHashMap results=new ConcurrentHashMap();//任务返回结果
private HashMap workers=new HashMap();  //任务执行者

//初始化master 同时创建i个worker
public master(int i) {
for (int j = 0; j workers.put("worker"+j,new Thread(new worker(this)) );
}
}
//提交任务
public void submit(int  i) {
for (int j = 0; j < i; j++) {
task task = new task();
task.setId(j);
task.setName("任务"+j);
tasks.add(task);
}
}

//判断线程是否已经停止
public boolean  isComplete() {
for (Map.Entry worker : workers.entrySet()) {
if( worker.getValue().getState()!=Thread.State.TERMINATED){
return false;
}

}
return true;
}
//开启线程
public void excute() {
for (Map.Entry worker : workers.entrySet()) {
worker.getValue().start();
}
}

}


/**
 * 任务执行者 ,继承runnable接口 ,每个worker中都要有相同的master(获取任务,返回结果)
 *
 */
public class worker implements Runnable {
private master master;
public worker(master master){
this.master=master;

}
public void run() {
while (true) {
ConcurrentLinkedQueue tasks = master.getTasks();
task poll = tasks.poll();
if(poll==null) break; //当任务被取完后跳出循环
//...............此处执行业务,假设需要0.1秒
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("----------------------------"+Thread.currentThread().getName());
master.getResults().put(poll.getId()+"", poll.getName());//返回结果
}

}
}

你可能感兴趣的:(设计模式)