package com.jackson.executor;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 队列任务执行者,可控制最大执行线程数 {最大并发数 @ maxThread}
*
* @author Jackson
*/
@Deprecated
public class TaskExecutor {
private Thread queueThread;//用来获取队列任务的线程
private ExecutorService threadPool;//执行任务的线程池
private Logger logger = LogManager.getLogger(getClass().getName());
public TaskExecutor(int maxThread) {
this.maxThread = maxThread;
}
private int maxThread = 3;//默认最大执行线程数
private LinkedBlockingQueue<Runnable> taskQueue;//任务队列
public TaskExecutor() {
queueThread = new Thread() {
@Override
public void run() {
while (!interrupted()) {
Runnable task = take();
if (task != null)
threadPool.execute(task);
}
}
};
threadPool = Executors.newFixedThreadPool(maxThread);
taskQueue = new LinkedBlockingQueue<>();
queueThread.start();
}
private Runnable take() {
try {
return taskQueue.take();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void addTask(Runnable task) {
try {
//System.out.println("taskQueue size"+taskQueue.size());
taskQueue.put(task);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}