【发布时间】:2014-07-09 14:51:45
【问题描述】:
我有一个 java 服务器,它正在处理客户端请求的网页中的图像。
现在处理这些图像需要时间和内存,并且进入处理图像的 n 个线程会挂起服务器。
现在为了避免处理图像的代码的情况,我将它们放在一个 Runnable 类中并从执行器池中调用它们。
我的问题是,下面的实现是否是在服务器中执行 Executor 池的正确方法。
Runnable 类是 -
public class MyRunnable implements Runnable {
private final String id;
MyRunnable(String tid) {
this.id = tid;
}
@Override
public void run() {
NewAlbumImage nai = new NewAlbumImage();
nai.save_image(id,false);
}
}
运行 Runnable 类的代码如下 -
newa.NewClass newca = new newa.NewClass();
Runnable mr = new MyRunnable(id);
newca.executor.execute(mr);
NewClass 类有一个静态执行器变量 -
static ExecutorService executor;
我在 web 应用程序启动时初始化 executor 变量,并在 web 应用程序关闭时销毁它 -
public class AppNameServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Initializing Executor Pool");
NewClass nc = new NewClass();
nc.executor = Executors.newFixedThreadPool(10);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
NewClass nc = new NewClass();
nc.executor.shutdown();
try {
nc.executor.awaitTermination( 10L, TimeUnit.MINUTES);
} catch (InterruptedException ex) {
System.out.println("Executor Pool await Termination exception");
}
}
}
【问题讨论】:
标签: java multithreading tomcat executorservice