Как контролировать много потоков Java? - PullRequest
1 голос
/ 27 марта 2012

В настоящее время у меня есть цикл while для прослушивания порта.Когда сокет принимает соединение, будет создана Задача, которая реализует интерфейс runnable и назначена для LinkedList с именем o_allTaskThreads для ее хранения.Это значит, что у меня есть контроль, чтобы остановить их.

                s = this.o_ServerSocket.accept();
                System.out.println("connection established");

                PortListenTask plt = new PortListenTask(s,this.o_config);
                this.o_allTaskThreads.add(plt);
                plt.run();

Но у меня возникли некоторые проблемы: если PortListenTask выполнено / завершено или исключение завершено, он не может обновить relatedLIst o_allTaskThreads, как я могу это решить?Спасибо.

Ответы [ 4 ]

2 голосов
/ 27 марта 2012

LinkedList не очень хорошая идея для хранения потоков или заданий. Попробуйте прочитать это Пулы потоков и Пулы потоков и рабочие , которые могут помочь.

1 голос
/ 27 марта 2012

Когда метод run () PortListenTask завершается (нормальное выполнение завершается), не может ли он тогда обновить связанный список (я предполагаю удалить себя)?Если вы добавите обработчик try / catch для содержимого вашего метода run (), то, надеюсь, вы сможете перехватить ненормальные ситуации и помочь им пройти через тот же чистый выход.Вы должны всегда пытаться и сигнализировать о потоке, чтобы выйти из себя, а не прерывать их извне, чтобы позволить такой чистый выход.

0 голосов
/ 27 марта 2012

Если вы используете более новую версию Java (jdk 6), посмотрите на Future .

Если вы ограничены и хотите использовать альтернативный подход, попробуйте использовать наблюдаемую наблюдателем модель. Вы можете использовать 'events' для достижения того же.

0 голосов
/ 27 марта 2012

У вас может быть логическое значение в каждом PortListenTask, которое указывает, работает ли оно по-прежнему, затем, просматривая потоки, проверяйте логическое значение и, при необходимости, удаляйте его из списка, используя remove (int index).Вы также можете сделать список статическим и удалить запись из списка из потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...