1

我在 Jetty 上创建并运行了 Web 应用程序。我已经使用 ExecutorService 创建
了一个像这样的新线程池,

ExecutorService es = Executors.newFixedThreadPool(10);

但是我听说在应用服务器中创建自己的线程池是不可取的,我必须让应用服务器处理线程。

那么我怎样才能在 Jetty 中做到这一点。

请原谅我是 Jetty 的新手,提前致谢

这是程序,

public class SampleExecutors {

    public SampleExecutors() {
        ExecutorService executors = Executors.newFixedThreadPool(10);
        Callable<List<Map<Record,String>>> text = new TextSearcher(domain, searchText);
        Future<List<Map<Record,String>>> submit = executors.submit(text);
        executors.shutdown();
    }
}

log.info("Active threads count:"+Thread.activeCount());

在这里,在创建的工作线程完成其任务后,我正在调用 executors.shutdown()

但是,如果我执行 Thread.activeThreads(),我仍然可以看到创建的线程。

所以发生的情况是,由于实例化在构造函数中而不是单例,因此每次调用 SampleExecutors 时,都会创建一个新的线程池。

我不想使 Executors 静态或将其从构造函数中移动,我想知道在它们服务于任务后如何关闭或杀死创建的线程。

4

1 回答 1

1

Afaik jetty 不是一个 AS,而是一个带有 servlet 容器的简单 Web 服务器。在 servlet 容器中编写多线程代码是可以的。
进一步阅读:
每个servlet实例和servlet中每个servlet线程的区别?
http://balusc.blogspot.co.uk/2010/06/servlet-lifecycle-and-multithreading.html

于 2013-09-05T10:01:59.170 回答