spring配置线程池

spring提供了线程池的支持
查看基本Java线程池
 
先是一个线程 ThreadTransCode.java
package com.enorth.lichen.transcode; 

public class ThreadTransCode implements Runnable{ 
    
  @Override 
  public void run() { 
    System.out.println("转码开始.............."); 
  } 
}
 
在spring配置文件中添加线程池的配置信息
<bean id="taskExecutor" 
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> 
    <property name="corePoolSize" value="3" /> 
    <property name="keepAliveSeconds" value="200" /> 
    <property name="maxPoolSize" value="5" /> 
    <property name="queueCapacity" value="25" /> 
  </bean>
 
在action中添加注入
<bean id="saveVideoAction" 
      class="com.enorth.lichen.action.video.SaveVideoAction" 
      scope="prototype"> 
      <property name="videoService"> 
        <ref bean="videoService" /> 
      </property> 
      <property name="groupService"> 
        <ref bean="groupService" /> 
      </property> 
      <property name="taskExecutor"> 
        <ref bean="taskExecutor" /> 
      </property>
 

    </bean>
 
在action中调用
private TaskExecutor taskExecutor;    

public TaskExecutor getTaskExecutor() {    
        return taskExecutor;    
    }    

public void setTaskExecutor(TaskExecutor taskExecutor) {    
        this.taskExecutor = taskExecutor;    
    }    

public String execute() throws Exception {

for(int k = 0; k < 2; k++) {    
        taskExecutor.execute(new ThreadTransCode());    
    } 
return SUCCESS; 

 
以上就可以用spring实现java线程池的使用...
遗憾的是, 我在用线程池执行flv的转码线程时, 发现只有停掉tomcat才能自动执行转码的操作, 其他简单操作的多线程都是可以的. 原因不明, 难道转码的线程太耗资源?
 
 
日日日.问题解决了.原因是死锁...实际转码的线程在tomcat停掉后就能自动运行已经说明了,我日竟然没注意...
线程池 ThreadPool.java
  public static ExecutorService exec = Executors.newFixedThreadPool(1); 
    
  public static synchronized void trans(String videoPath,String targetPath){ 
    ThreadTransCode trans=new ThreadTransCode(videoPath,targetPath); 
    exec.execute(trans); 
  }
 
 本文转自chainli 51CTO博客,原文链接:http://blog.51cto.com/lichen/162057,如需转载请自行联系原作者
 
上一篇:HTML学习总结(作业五)


下一篇:智能存储解决方案需求为啥高?