package com.jackson.executor; import com.jackson.utils.StringUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.LinkedBlockingQueue; /** * Created by Jackson on 2016/12/23. * 单线程执行,对数据库的操作 * * 添加任务的时候,如果任务类相同,将老的移除,变成新的 */ public enum DBSingleExecutor { instance; private Logger logger = LogManager.getLogger(DBSingleExecutor.class.getName()); LinkedBlockingQueue<DBTask> taskQueue; private final Thread executor; DBSingleExecutor(){ taskQueue = new LinkedBlockingQueue(); executor = new Thread() { @Override public void run() { while (!isInterrupted()) { try { DBTask task = taskQueue.take(); logger.debug("执行任务:{}",task.getClass().getName()); task.run(); } catch (Exception e) { logger.error(e.toString()); } } } }; executor.start(); } public static abstract class DBTask implements Runnable{ @Override public boolean equals(Object obj) { return StringUtil.equals(obj.getClass().getName(),this.getClass().getName()); } } public void execute(DBTask task){ if(!taskQueue.contains(task)){ taskQueue.offer(task); logger.debug("插入任务成功:{} 当前任务数:{}",task.getClass().getName(),taskQueue.size()); } } }