📄 videothreandlistener.java
字号:
package cn.com.csuinfosoft.listener;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.WebApplicationContext;
import cn.com.csuinfosoft.dao.DAO;
import cn.com.csuinfosoft.util.CreateConverterThread;
public class VideoThreandListener implements ServletContextListener {
private ExecutorService executorService = null;
public void contextDestroyed(ServletContextEvent event) {
executorService.shutdown();
//如果等待时间后,线程还为结束就 自动终止当前线程
while(!executorService.isTerminated())
{
try
{
executorService.awaitTermination(30, TimeUnit.SECONDS);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
public void contextInitialized(ServletContextEvent event) {
//加载配置中关于线程池的多大线程数
String max = event.getServletContext().getInitParameter("maxThreas");
int maxThreads = 10; //某人为10个线程
if(max != null || !max.equals("")) {
maxThreads = Integer.parseInt(max);
}
//加载配置中关于视频文件的存放位置数
String videoDir = event.getServletContext().getInitParameter("videoDir");
if(videoDir == null || videoDir.equals("")) {
videoDir = "/videoDir";
}
videoDir = event.getServletContext().getRealPath(videoDir);
//加载配置中关于扫描间隔时间
String waitT = event.getServletContext().getInitParameter("waitTime");
int waitTime = 54000; //某人为10个线程
if(waitT != null || !waitT.equals("")) {
waitTime = Integer.parseInt(waitT);
}
//创建线程池对象
executorService = Executors.newFixedThreadPool(maxThreads);
WebApplicationContext applicationContext = (WebApplicationContext)event.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
String bean = event.getServletContext().getInitParameter("flvDAO");
if(bean == null || bean.equals("")) {
bean = "flvInfoDAO";
}
DAO dao = (DAO)applicationContext.getBean(bean);
//创建一个监听线程 一直监视是否有需要转换的视频文件
Thread thread;
try {
thread = new CreateConverterThread(executorService,dao,videoDir,waitTime);
thread.setDaemon(true);//设置为后台线程
thread.start();//开启线程
} catch (Exception e) {
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -