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="${task.core_pool_size}" />   <property name="maxPoolSize" value="${task.max_pool_size}" />   <property name="queueCapacity" value="${task.queue_capacity}" />   <property name="keepAliveSeconds" value="${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;}

具体线程还是有些不懂
时间: 2024-10-17 14:03:10

ExecutorService与ThreadPoolTaskExecutor的相关文章

spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue

一: ThreadPoolTaskExecutor是一个spring的线程池技术,查看代码可以看到这样一个字段: private ThreadPoolExecutor threadPoolExecutor; 可以发现,spring的  ThreadPoolTaskExecutor是使用的jdk中的java.util.concurrent.ThreadPoolExecutor进行实现, 直接看代码: @Override protected ExecutorService initializeExe

spring 中 ThreadPoolTaskExecutor 的使用

配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springfr

ExecutorService 的理解与使用

接口 Java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行.壹個 ExecutorService 实例因此特别像壹個线程池.事实上,在 java.util.concurrent 包中的 ExecutorService 的实现就是壹個线程池的实现. ExecutorService 样例 这里有壹個简单的使用Java 实现的 ExectorService 样例: [java] view plain copy ExecutorServ

Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式

android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解. [size=1.8em]Handler+Runnable模式 我们先看一个并不是异步线程加载的例子,使用 Handler+Runnable模式. 这里为何不是新开线程的原因请参看这篇文章:Android Runnable 运行在那个线程 这里的代码其实是在UI 主线程中下载图片的,而不是新开线程. 我们运行下面代码时,会发现他其实是阻塞了整个界面

ExecutorService.invokeAny()和ExecutorService.invokeAll()的使用剖析

ExecutorService是JDK并发工具包提供的一个核心接口,相当于一个线程池,提供执行任务和管理生命周期的方法.ExecutorService接口中的大部分API都是比较容易上手使用的,本文主要介绍下invokeAll和invokeAll方法的特性和使用. package tasks; import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; public class SleepSecondsC

使用CompletionService结合ExecutorService批处理任务

CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象. 如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果.为此你可以将每个任务的Future保存进一个集合,然后循环这个集合调用Future的get()取出数据.幸运的是CompletionService帮你做了这件事情. CompletionService整合了Executor和BlockingQueue的功能.你可以将Callabl

Spring中的线程池ThreadPoolTaskExecutor

1.直接调用Spring框架中的ThreadPoolTaskExecutor ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor(); //线程池所使用的缓冲队列 poolTaskExecutor.setQueueCapacity(200); //线程池维护线程的最少数量 poolTaskExecutor.setCorePoolSize(5); //线程池维护线程的最大数量 poolTaskExecutor.s

Java ExecutorService 多线程实践(一)

需要实现一个多线程并发的业务场景,启动若干子线程,最后要所有子线程运行结束才结束.(类似 .NET 里的 Task WaitAll ) Java 中的 ExecutorService 多线程编程模型提供这样一个机制,通过代码来介绍一下. 方法一:ExecutorService#awaitTermination /** * Blocks until all tasks have completed execution after a shutdown * request, or the timeo

Java多线程系列七——ExecutorService

java.util.concurrent.ExecutorService接口提供了许多线程管理的方法 Method 说明 shutdown 拒绝接收新的任务,待已提交的任务执行后关闭,且宿主线程不阻塞,若需要阻塞可借助awaitTermination实现 shutdownNow 停止所有正在执行的任务,挂起未执行的任务并关闭,且宿主线程不阻塞,若需要阻塞可借助awaitTermination实现 awaitTermination 当发生shutdown时,阻塞宿主线程直到约定的时间已过或者所有任