executors和executorService使用例子

一。  executors以及executorService的调用例子。

		log.info("service start.");
		ExecutorService service = Executors.newFixedThreadPool(maxThreadNum);
		final CountDownLatch signal=new CountDownLatch(maxThreadNum);
		for (int i = 0;i < resList.size();i++){   
			service.submit(new QueryMobileBalanceRunnableTask(mobileBalanceService,(List<MobileBalance>)resList.get(i),signal));   
		}
		
		try {
			signal.await();
		} catch (InterruptedException e) {
			log.warn("doMultiThreading Interrupted.",e);
			return;
		}
		
                //关闭主线程
                service.shutdownNow();
		log.info("in doMultiThreading end.");

         主要说明:

     Executors.newFixedThreadPool(number)   创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们,并在需要时使用提供的 ThreadFactory 创建新线程。

          CountDownLatch      用 N 初始化的 CountDownLatch 可以使一个线程在 N 个线程完成某项操作之前一直等待,或者使其在某项操作完成 N 次之前一直等待。 

          executorService.submit()    提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的 get 方法在成功 完成时将会返回 null。

          await    使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。

          shutdown()  调用这个方法时,ExecutorService停止接受任何新的任务且等待已经提交的任务执行完成(已经提交的任务会分两类:一类是已经在执行的,另一类是还没有开始执行的),当所有已经提交的任务执行完毕后将会关闭ExecutorService。

         shutdownNow()   试图停止所有正在执行的活动任务(待正在执行的任务停止),暂停处理正在等待的任务,并返回等待执行的任务列表。


二。 子任务代码

package com.ffcs.icity.threadpool;

import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ffcs.icity.entity.MobileBalance;
import com.ffcs.icity.service.IMobileBalanceService;


/**
 * 查询话费余额子任务
 * @author alan
 * @createtime 2013-7-23     
 *
 */
public class QueryMobileBalanceRunnableTask implements Runnable {

	private final static Logger log = LoggerFactory.getLogger(QueryMobileBalanceRunnableTask.class);
	private List<MobileBalance> list;
	private IMobileBalanceService mobileBalanceService;
	private CountDownLatch countDownLatch;

	public QueryMobileBalanceRunnableTask(IMobileBalanceService mobileBalanceService,List<MobileBalance> list,CountDownLatch countDownLatch) {
		this.mobileBalanceService = mobileBalanceService;
		this.list = list;
		this.countDownLatch = countDownLatch;
	}

	@Override
	public void run() {
		
		log.info("start QueryMobileBalanceTask.");
		if(CollectionUtils.isEmpty(list)) {
			log.error("in QueryMobileBalanceTask has no data.");
			return;
		}
		
		mobileBalanceService.doMobileBalance(list);
		//减少外部传递的信号量
		countDownLatch.countDown();
		log.info("end QueryMobileBalanceTask.");
	}

}
























你可能感兴趣的:(java,exception,String,object,null)