1

Jetty で Web アプリケーションを作成して実行しています。ExecutorService を使用して
、このような新しい Threadpoolを作成しました。

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 が呼び出されるたびに、新しいスレッドプールが作成されます。

エグゼキューターを静的にしたり、コンストラクターから移動したりしたくありません。作成されたスレッドがタスクを実行した後に、それらを閉じるまたは強制終了する方法を知りたいです。

4

1 に答える 1

1

Afaik jetty は AS ではなく、サーブレット コンテナーを備えた単純な Web サーバーです。マルチスレッド コードをサーブレット コンテナーに記述しても問題ありません。
さらに読む:
サーブレットの各インスタンスとサーブレット内のサーブレットの各スレッドの違いは?
http://balusc.blogspot.co.uk/2010/06/servlet-lifecycle-and-multithreading.html

于 2013-09-05T10:01:59.170 に答える