Spring线程池

  • 了解TaskExecutor接口

当创建了一个新的 Configuration 对象时,它使用一个 maxStrongSize 值为 0 的 MruCacheStorage 缓存来 初 始 化 , maxSoftSize 的值是 Integer.MAX_VALUE(也就是说在实际中, 是无限大 的)。但是使用 非 0 的 maxStrongSize 对于高负载的服务器来说也许是一个更好的策略,对于少量引用的组 件来说,如果资源消耗已经很高的话,Java 虚拟机往往会引发更高的资源消耗,因为它不断 从缓存中抛出经常使用的模板,这些模板还不得不再次加载和解析。

 

  • TaskExecutor接口的实现类
  1. SimpleAsyncTaskExecutor类:这个实现不重用任何线程,或者说它每次调用都启动一个新线程。但是,它还是支持对并发总数设限,当超过线程并发总数限制时,阻塞新的调用,直到有位置被释放。
  2. SyncTaskExecutor类:这个实现不会异步执行。相反,每次调用都在发起调用的线程中执行。它的主要用处是在不需要多线程的时候,比如简单的test case。
  3. ConcurrentTaskExecutor类:这个实现是对java.util.concurrent.Executor类的包装。
  4. SimpleThreadPoolTaskExecutor类:这个实现实际上是Quartz的SimpleThreadPool类的子类,它会监听Spring的生命周期回调。当你有线程池,需要在Quartz和非Quartz组件中共用时,这是它的典型用处。
  5. ThreadPoolTaskExecutor类:它不支持任何对java.util.concurrent包的替换或者下行移植。
  6. TimerTaskExecutor类:这个实现使用一个TimerTask作为其背后的实现。它和SyncTaskExecutor的不同在于,方法调用是在一个独立的线程中进行的,虽然在那个线程中是同步的。
  7. WorkManagerTaskExecutor类:这个类实现了WorkManager接口,因此可以直接作为WorkManager使用。
  • 线程池Demo之ThreadPoolTaskExecutor 
import org.springframework.core.task.TaskExecutor;  
   
public class TaskExecutorExample {  
    private TaskExecutor taskExecutor;  
     public TaskExecutorExample(TaskExecutor taskExecutor) {      
        this.taskExecutor = taskExecutor;    
     }  
     public void printMessages() {      
         for(int i = 0; i < 25; i++) {        
             taskExecutor.execute(new MessagePrinterTask("Message" + i));      
         }    
     }  
      
       
     private class MessagePrinterTask implements Runnable {      
         private String message;      
         public MessagePrinterTask(String message) {        
             this.message = message;      
         }      
         public void run() {        
             System.out.println(message);      
         }  
     }  
} 

 

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">                 
                   <!-- 线程池活跃的线程数 -->     
     <property name="corePoolSize" value="5" />   
                    <!-- 线程池最大活跃的线程数 -->    
     <property name="maxPoolSize" value="10" />   
                    <!-- 队列的最大容量 -->    
     <property name="queueCapacity" value="25" />  
 </bean>  
 <bean id="taskExecutorExample" class="powercn.TaskExecutorExample">   
     <constructor-arg ref="taskExecutor" />  
 </bean>

 

你可能感兴趣的:(spring)