举个栗子(基于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
