资源简介

定义全局线程池,将用户的请求放入自定义队列中,排队等候线程调用,等待超时则自动取消该任务,实现超时可取消的异步任务

资源截图

代码片段和文件信息

package com.test.filter;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.linkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.log4j.Logger;

public class ThreadPoolFilter implements Filter {
private static SimpleDateFormat smf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.sss“);
private static BlockingQueue waitqueue = new linkedBlockingQueue();
private static BlockingQueue queue = new linkedBlockingQueue();
private static ThreadPoolExecutor executor;
private static ExecutorService es = Executors.newFixedThreadPool(1);
private static Logger logger = Logger
.getLogger(ThreadPoolFilter.class.getName());

public static void setWaitqueue(Runnable runnable) {
waitqueue.add(runnable);
}

@Override
public void init(FilterConfig fConfig) throws ServletException {
int corePoolSize = Integer.parseInt(fConfig.getInitParameter(“corePoolSize“));
int maxMumPoolSize=Integer.parseInt(fConfig.getInitParameter(“maxMumPoolSize“));
long keepAliveTime=Long.parseLong(fConfig.getInitParameter(“keepAliveTime“));
executor= new ThreadPoolExecutor(corePoolSize maxMumPoolSize keepAliveTime TimeUnit.SECONDS queue);
es.execute(new Runnable() {
@Override
public void run() {
while (true) {
while (waitqueue.size() > 0) {
try {
logger.info(“waitqueue:“ + waitqueue.size());
Runnable task = waitqueue.take();
executor.submit(task);
logger.info(“queue:“ + queue.size());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
System.out.println(“init ThreadPoolExecutor....“);
}

@Override
public void destroy() {
try {
executor.shutdownNow();
} catch (Exception e) {
// TODO: handle exception
}
try {
es.shutdownNow();
} catch (Exception e) {
// TODO: handle exception
}
System.out.println(this.getClass().getName()+“:shutdown success“);
}

@Override
public void doFilter(ServletRequest request ServletResponse response FilterChain chain)
throws IOException ServletException {
chain.doFilter(request response);
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1139  2019-11-25 10:35  TestQueue\.classpath

     文件       1059  2019-11-25 10:35  TestQueue\.project

     文件        564  2019-11-25 10:35  TestQueue\.settings\.jsdtscope

     文件         62  2019-11-25 10:36  TestQueue\.settings\com.genuitec.eclipse.modernweb.common.core.prefs

     文件         57  2019-11-25 10:36  TestQueue\.settings\org.eclipse.core.resources.prefs

     文件        364  2019-11-25 10:35  TestQueue\.settings\org.eclipse.jdt.core.prefs

     文件        486  2019-11-25 10:35  TestQueue\.settings\org.eclipse.wst.common.component

     文件        396  2019-11-25 10:35  TestQueue\.settings\org.eclipse.wst.common.project.facet.core.xml

     文件         49  2019-11-25 10:35  TestQueue\.settings\org.eclipse.wst.jsdt.ui.superType.container

     文件          6  2019-11-25 10:35  TestQueue\.settings\org.eclipse.wst.jsdt.ui.superType.name

     文件       2642  2019-11-25 10:37  TestQueue\src\com\test\filter\ThreadPoolFilter.java

     文件       2468  2019-11-25 10:42  TestQueue\src\com\test\servlet\FurtureTaskTest.java

     文件        471  2019-11-25 10:45  TestQueue\src\com\test\servlet\ResultDemo.java

     文件       3697  2019-11-25 11:40  TestQueue\src\com\test\servlet\TestServlet.java

     文件        834  2019-11-25 10:35  TestQueue\WebRoot\index.jsp

     文件         39  2019-11-25 10:35  TestQueue\WebRoot\meta-INF\MANIFEST.MF

     文件       1658  2019-11-25 10:38  TestQueue\WebRoot\WEB-INF\classes\com\test\filter\ThreadPoolFilter$1.class

     文件       4103  2019-11-25 10:38  TestQueue\WebRoot\WEB-INF\classes\com\test\filter\ThreadPoolFilter.class

     文件       2867  2019-11-25 10:42  TestQueue\WebRoot\WEB-INF\classes\com\test\servlet\FurtureTaskTest.class

     文件        996  2019-11-25 10:45  TestQueue\WebRoot\WEB-INF\classes\com\test\servlet\ResultDemo.class

     文件       1569  2019-11-25 10:42  TestQueue\WebRoot\WEB-INF\classes\com\test\servlet\TaskCallable.class

     文件       1993  2019-11-25 11:40  TestQueue\WebRoot\WEB-INF\classes\com\test\servlet\TestServlet$1.class

     文件       1671  2019-11-25 11:40  TestQueue\WebRoot\WEB-INF\classes\com\test\servlet\TestServlet$TestCallable.class

     文件       4411  2019-11-25 11:40  TestQueue\WebRoot\WEB-INF\classes\com\test\servlet\TestServlet.class

     文件     367444  2019-11-25 10:38  TestQueue\WebRoot\WEB-INF\lib\log4j-1.2.14.jar

     文件       1365  2019-11-25 11:37  TestQueue\WebRoot\WEB-INF\web.xml

     目录          0  2019-11-25 10:38  TestQueue\WebRoot\WEB-INF\classes\com\test\filter

     目录          0  2019-11-25 10:58  TestQueue\WebRoot\WEB-INF\classes\com\test\servlet

     目录          0  2019-11-25 10:38  TestQueue\WebRoot\WEB-INF\classes\com\test

     目录          0  2019-11-25 10:37  TestQueue\src\com\test\filter

............此处省略15个文件信息

评论

共有 条评论

相关资源