0

java.uti.concurrentパッケージ初心者です。を使用してソケット リスナ クラスを開発しようとしていますExecutorService。ここに私のメインコードスニペットがあります:

    while (!getExit()) {

        try{
            logger.info("RequestListner.run(): listening for new request...");
            Socket socket = server.accept();
            logger.info("RequestListner.run(): got new request");
            MyTask task = new MyTask(socket);
            pool.submit(task);
            logger.info("RequestListner.run(): submitted new request to pool");
        }catch(Exception e) {
            logger.error("RequestListner.run(): Exception: "+e.getMessage());
        }
    }

MyTaskのクラスにはオブジェクトがあり、タスクExecutorServiceを送信します。MyTask2(私の意図は、各ソケット接続に対してマルチスレッド処理を実行することです)

私のアプリケーションは、ソケット クライアント リクエストを受け入れ、 のプールを作成しておりMyTask2、正常に実行されています。しかし、最初のリクエストを終了した後にのみ、2番目のソケットクライアント接続を受け入れています。

誰でもこれを修正する方法を教えてください。

前もって感謝します。

-ベンカット・パパナ

4

2 に答える 2

1

どのようなものを作成しましたExecutorExecutorService?

public static final POOL_SIZE = 5;
ExecutorService exec = Executors.newFixedThreadPool(POOL_SIZE);
于 2011-08-27T12:49:22.177 に答える
0

ExecutorService の「プール」を作成する必要はありません。1 つの ExecutorService を使用するだけで、それ自体が内部でスレッドのプールを管理します。

また、 ExecutorService の実装は、指定された数のタスクを並行して実行できる必要があります。たとえば、その中でExecutors.new*ThreadPool()メソッドを使用し、それに応じてパラメータ化します。

于 2011-08-27T12:46:35.593 に答える