Master-Worker多线程设计模式实现

今天简单的做了一下Master-Worker设计模式的Java实现

主要四个类,Master,Worker,Task,Result,还有一个测试类

Master类

package Master_Worker;

import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.LinkedBlockingQueue;

import javax.swing.text.LayoutQueue;

public class Master {

	private Queue<Task> tasks = new LinkedBlockingQueue<Task>();
	private Map<String, Thread> allWorkerThread = new HashMap<String,Thread>();
    public ConcurrentHashMap<String,Result> allResult = new ConcurrentHashMap<>();
	
	public void addTask(Task t) {
		tasks.add(t);
	} 
	
	public Task getTask() {
		return tasks.poll();
	}
	
	public void startANewTask() {
		Task t = getTask();
		if(t != null) {
			Runnable worker = new Worker(t,allResult);  	
		    new Thread(worker).start();
		}  
	}
	public void print() {
		
		
		int i = 0;
		try{
		for(i = 0;i < 100;i++) {
		System.out.println(allResult.get("" + i).getValue());
		}
		}catch(java.lang.NullPointerException e) {
			System.out.println(i);
			e.printStackTrace();
		}		
	}
	
}

Worker类

package Master_Worker;

import java.util.HashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;


public class Worker implements Runnable{ 
	Task t;
	public ConcurrentHashMap<String,Result> allResult;
	public Worker(Task t, ConcurrentHashMap<String,Result> allResult) {
		// TODO Auto-generated constructor stub
	this.t= t;
	this.allResult = allResult;
	}
	

	@Override
	public void run() {
		work(t,allResult);
		
	}


	private void work(Task t2, ConcurrentHashMap<String,Result> allResult) {
		//System.out.println(1);
		Result<String> result = new Result("a");
 	     allResult.put(""+ t2.getValue(),result);
		System.out.println(1);
	}
}

Result类

package Master_Worker;

public class Result<T> {
T r;
    
    public Result(){
    	
    }
    
    public Result(T r){
    	this.r = r;
    }

	public void setValue(T r) {
		// TODO Auto-generated method stub
		this.r = r;
	}
	
	public T getValue() {
		return r;
	}
	

}

Task类

package Master_Worker;

public class Task<T>{

	public T value;
	
	public Task(T value) {
		this.value = value;
	}

	public T getValue() {
		return value;
	}

	public void setValue(T value) {
		this.value = value;
	}
	
	
}
package Master_Worker;

public class Test {

	public static void main(String[] args) throws InterruptedException {
		Master m = new Master();
		int i = 0;
		for(i = 0;i < 100;i++) {
			Task<Integer> t = new Task<Integer>(i);
			m.addTask(t);
			m.startANewTask();
		}
		
		while(m.allResult.size() != 100) {
			
		}
	    m.print();
		 	
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39668086/article/details/82530196
今日推荐