当前位置 : 主页 > 编程语言 > c++ >

异步多线程任务处理

来源:互联网 收集:自由互联 发布时间:2021-07-03
举个栗子(基于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
举个栗子(基于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 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
     
    
   
  
 
网友评论