Параллелизм Java: могу ли я создать пул, используя рабочий поток - PullRequest
0 голосов
/ 27 августа 2011

Я новичок в 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, выполняя штраф.Но принимает мое второе клиентское соединение с сокетом только после того, как закончил мой запрос на фрист.

Может кто-нибудь, пожалуйста, дайте мне знать, как это исправить.

Заранее спасибо.

-VenkatPapana

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Какие Executor или ExecutorService вы создали?

public static final POOL_SIZE = 5;
ExecutorService exec = Executors.newFixedThreadPool(POOL_SIZE);
0 голосов
/ 27 августа 2011

Вам не нужно создавать «пул» ExecutorService, просто используйте один ExecutorService и он сам управляет внутренним пулом потоков.

А также ваша реализация ExecutorService должна иметь возможность выполнять заданное количество задач параллельно,Например, используйте в нем Executors.new * ThreadPool () методы и соответствующим образом его параметризуйте.

...