一般而言,早期的JAVA多线程管理,特别是线程池优先级等等的管理相对比较复杂。

最近一个项目用到,调查了一下,发现不算新的JAVA版本提供了更好的多线程管理机制,,也就是ThreadPoolExecutor类。

废话不说,直接上简单代码

//先写一个线程池控制类,定义一个成员变量
private ExecutorService executor;
//在初始化或者使用线程池之前
this.executor = new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new PriorityBlockingQueue<Runnable>());
//其中 nThreads 为线程数

具体的业务逻辑定义一个类来实现,比如 

 

public class TaskThread implements Runnable, Comparable<TaskThread> {

	private MainProcess mainProcess;
	/**
	 * 优先级默认0
	 */
	private int priority = 0;

	protected FileInfo event;

	public TaskThread(String objFileName) {
		this.event = new FileInfo(objFileName);
		this.priority = event.getPriority();
	}

    //优先级的比对逻辑
	public int compareTo(TaskThread o) {
		if (this.getPrioity() < o.getPrioity()) {
			return 1;
		} else if (this.getPrioity() > o.getPrioity()) {
			return -1;
		} else {
			return 0;
		}
	}

	protected int getPrioity() {
		return this.priority;
	}

	//具体业务实现
	public void run() {
		mainProcess = new MainProcess();
		mainProcess.doJob(event);
	}

}

上述类只是传入一个文件名,并且有优先级判断。其实可以自己实现很多优先级对比逻辑。

在使用的时候,直接通过命令 灌入,无需线程管理,直接按照设定要求逐个执行,而且支持优先级等设定,非常方便。

	TaskThread thread = new TaskThread(objFileName); executor.execute(thread);

 

最后修改日期: 2016年10月18日

作者