一般而言,早期的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);