首页 > 代码库 > ExecutorService与ThreadPoolTaskExecutor

ExecutorService与ThreadPoolTaskExecutor

1.ExecutorService 

private static ExecutorService exec = null;
public static ExecutorService getExecutorServiceInstance(){
if(exec == null){
exec = Executors.newCachedThreadPool();
}
return exec;
}
public void threadNoticeOrMessageOrShortMessage (Integer type, Map<String, String> map, List<String> replaceParameter, List<String> list, Integer saveFlag){
exec = getExecutorServiceInstance();
NoticeOrMessageOrShortMessage noticeOrMessageOrShortMessage = new NoticeOrMessageOrShortMessage(getMessagePushInstance(), type, map, replaceParameter, list, saveFlag,
messagePushService, sendPushService, sendSmsService, sendMessageService);
exec.execute(noticeOrMessageOrShortMessage);
}

2.ThreadPoolTaskExecutor

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="http://www.mamicode.com/${task.core_pool_size}" />
<property name="maxPoolSize" value="http://www.mamicode.com/${task.max_pool_size}" />
<property name="queueCapacity" value="http://www.mamicode.com/${task.queue_capacity}" />
<property name="keepAliveSeconds" value="http://www.mamicode.com/${task.keep_alive_seconds}" />
  <!-- 新增 -->
  1. <!-- 线程池对拒绝任务(无线程可用)的处理策略 -->  
  2.     <property name="rejectedExecutionHandler">  
  3.       <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />  
  4.     </property>  

</bean>

@Resource(name = "taskExecutor")
private TaskExecutor taskExecutor;
private void addSendTask(final MimeMessage mimeMessage) {
try {
taskExecutor.execute(new Runnable() {
public void run() {
javaMailSender.send(mimeMessage);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
另外一种方式(未验证代码准确性)
private static ThreadPoolTaskExecutor threadPoolTaskExecutor = null;
public static ThreadPoolTaskExecutor getThreadPoolTaskExecutor Instance(){
    if(threadPoolTaskExecutor == null){
    threadPoolTaskExecutor.setCorePoolSize(5);
    threadPoolTaskExecutor.setMaxPoolSize(50);
    threadPoolTaskExecutor.setQueueCapacity(1000);
    threadPoolTaskExecutor.setKeepAliveSeconds(60);
    try {
  taskExecutor.execute(new Runnable() {
   public void run() {
  javaMailSender.send(mimeMessage);
  }
  });
  } catch (Exception e) {
e.printStackTrace();
  }
   }
    return exec;
}

具体线程还是有些不懂

ExecutorService与ThreadPoolTaskExecutor