把一个任务分解成多个任务,而由于任务太多,不能一次并发执行,需把这些任务进行分批处理,用线程池来处理此问题。
import org.apache.log4j.Logger;
public class TaskStartProcessor implements Runnable{
private static Logger logger = Logger.getLogger(TaskStartProcessor.class);
private DataTaskInterface dataTask;
public TaskStartProcessor() {
}
public TaskStartProcessor(DataTaskInterface dataTask) {
this.dataTask = dataTask;
}
@Override
public void run() {
logger.info("正在執行子任務"+dataTask.getId());
dataTask.start();
logger.info("子任務"+dataTask.getId()+"执行完毕");
}
}
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 500, 2000, TimeUnit.MILLISECONDS,
new ArrayBlockingQueue<Runnable>(5));
for(DataTaskInterface dataTask:dataTasks){
TaskStartProcessor taskProcessor = new TaskStartProcessor(dataTask);
executor.execute(taskProcessor);
System.out.println("线程池中线程数目:"+executor.getPoolSize()+",队列中等待执行的任务数目:"+ executor.getQueue().size()+",已执行玩别的任务数目:"+executor.getCompletedTaskCount());
}
executor.shutdown();