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.");
	}

}
























ExecutorServiceJava并发包中的一个核心组件,它提供了一种管理线程池的方式。线程池可以帮助我们更好地管理和复用线程,提高程序性能。下面是一个简单的ExecutorService使用示例: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ExecutorServiceExample { public static void main(String[] args) { // 创建一个固定大小的线程池 ExecutorService executor = Executors.newFixedThreadPool(5); // 根据需要调整线程数 // 提交任务到线程池 for (int i = 0; i < 10; i++) { Runnable worker = new WorkerThread("" + i); executor.execute(worker); // 异步执行任务 } // 关闭线程池,停止接收新任务并开始处理遗留的任务 executor.shutdown(); try { // 等待所有提交的任务完成 if (!executor.isTerminated()) { System.out.println("Waiting for tasks to finish..."); executor.awaitTermination(60, TimeUnit.SECONDS); } } catch (InterruptedException e) { executor.shutdownNow(); // 如果中断,强制结束剩余任务 Thread.currentThread().interrupt(); } System.out.println("All threads finished"); } static class WorkerThread implements Runnable { private String command; public WorkerThread(String command) { this.command = command; } @Override public void run() { System.out.println(Thread.currentThread().getName() + " is running with command: " + command); // 这里可以添加实际的工作逻辑 } } } ``` 在这个例子中,我们创建了一个固定大小的线程池,并提交了10个Runnable对象。线程池会在后台执行这些任务。最后,我们调用`shutdown()`关闭线程池,`awaitTermination()`等待所有任务完成后主线程退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值