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

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

    </bean>
 
在action中调用
privateTaskExecutor taskExecutor;    

publicTaskExecutor getTaskExecutor() {    
        returntaskExecutor;    
    }    

publicvoidsetTaskExecutor(TaskExecutor taskExecutor) {    
        this.taskExecutor = taskExecutor;    
    }    

publicString execute()throwsException {

for(intk = 0; k < 2; k++) {    
        taskExecutor.execute(newThreadTransCode());    
    }
returnSUCCESS;
}
 
以上就可以用spring实现java线程池的使用...
遗憾的是, 我在用线程池执行flv的转码线程时, 发现只有停掉tomcat才能自动执行转码的操作, 其他简单操作的多线程都是可以的. 原因不明, 难道转码的线程太耗资源?
 
 
日日日.问题解决了.原因是死锁...实际转码的线程在tomcat停掉后就能自动运行已经说明了,我日竟然没注意...
线程池 ThreadPool.java
  publicstaticExecutorService exec = Executors.newFixedThreadPool(1);
    
  publicstaticsynchronizedvoidtrans(String videoPath,String targetPath){
    ThreadTransCode trans=newThreadTransCode(videoPath,targetPath);
    exec.execute(trans);
  }