举个栗子(基于Jfinal) public class TaskPoolTest {private static final String DRIVER = "oracle.jdbc.driver.OracleDriver";private static final String JDBCURL = "jdbc:oracle:thin:@192.***.***.***:1521:ORCL";private static final String
public class TaskPoolTest { private static final String DRIVER = "oracle.jdbc.driver.OracleDriver"; private static final String JDBCURL = "jdbc:oracle:thin:@192.***.***.***:1521:ORCL"; private static final String USERNAME = "****"; private static final String PASSWORD = "****"; static { //PropKit.use("config"); DruidPlugin dp = new DruidPlugin(JDBCURL, USERNAME, PASSWORD, DRIVER); ActiveRecordPlugin arp = new ActiveRecordPlugin(dp); arp.setShowSql(false);//显示sql arp.setDialect(new OracleDialect()); // 配置属性名(字段名)大小写不敏感容器工厂 arp.setContainerFactory(new CaseInsensitiveContainerFactory()); dp.setMaxActive(10); dp.start(); arp.start(); } public static void main(String[] args) { //初始化线程池,并实现其中的处理方法 AbstractTaskPool核心功能代码rp = new AbstractTaskPool () { @Override protected boolean exec(Record record) { System.out.println("打印内容:"+record.toJson()); return true; } }; /*读取数据库中的数据*/ List rel = Db.find("select * from ips t where state=0"); for(Record re:rel){ rp.offer(re); } } }
package lxycx.xc.module.dispose; import java.util.concurrent.LinkedBlockingQueue; import org.apache.log4j.Logger; /** * 抽象的多线程任务处理池,使用该任务池需要继承该抽象类,并实现其中的exec 方法。 * 通过 offer()方法添加被执行的任务到队列尾部,take()移除执行的任务到队列头。 * 过程中可以通过 addThread()方法动态添加线程数,removeThread()方法动态减少线程数 * * @author lxycx_xc * 时间:2017年8月28日 */ public abstract class AbstractTaskPool{ private Logger log = Logger.getLogger(AbstractTaskPool.class); //初始化创建指定的线程 private LinkedBlockingQueue Ftl;//空闲的线程池 private LinkedBlockingQueue execs;//任务队列 /** * 默认初始化5个线程 */ public AbstractTaskPool(){ init(5); } //初始化PriorityBlockingQueue public AbstractTaskPool(int size){ init(size); } /** * 初始化size个线程 * @param size */ private void init(int size){ Ftl = new LinkedBlockingQueue (); execs = new LinkedBlockingQueue (); for(int i=0;i