2010-12-07 6 views
2

Язык Java и вопрос: наличие какого-либо приложения, прослушивающего порт, и это приложение многопоточно, с потоками, содержащимися в наборе ThreadLocals Set.Can I, открывая сокет для потоковой передачи и передачи файла, может Я открываю сокет и доставляю его в конкретный поток? Приложение уже передает определенные сериализуемые объекты X-интерфейса между сокетами.Socket Stream writing

ответ

1

Я согласен с Питером. Но если вы отступите назад, подтвердите свой дизайн и решите, что вам действительно нужно это, я думаю, вы можете сделать это следующим образом.

Вы должны добавить к вашему протоколу какие-либо указания по резьбе. Предположим, что вы вызываете свои потоки 1, 2, 3 и т. Д. Таким образом, каждая команда, отправляемая с клиента, должна содержать идентификатор потока, к которому он предназначен. Слушающий поток должен извлечь это значение и отправить задачу в конкретный поток. Я понятия не имею, можете ли вы это сделать, используя существующие пулы потоков, которые вам нужны сами. Но не беспокойтесь: если ваш пул потоков прост (т. Е. Не меняет число потоков динамически и т. Д.), Это всего лишь 10 строк кода, чтобы написать собственный пул потоков: создать список потоков List<Thread> и написать цикл, который заполняет его: threads.add(new Thread()).

Каждый поток должен ждать в собственной очереди Runnable s. Когда новая задача поступает в Thread #n, просто создайте runnable и поместите ее в соответствующую очередь.

+0

просто хотел добавить возрасты после этого, что из-за этой идеи я сделал тогда таблицу, где я отслеживал связь потоков между клиентом/сервером. – hephestos 2013-02-04 15:22:04

0

Самый простой способ иметь рабочий поток, чтобы использовать ExecutorService, который однопоточный (или пул, если вы хотите), то вы можете дать ему задачи с

ExecutorService executor = Executors.newSingleThreadExecutor(); 

executor.execute(new Runnable() { ... }); 

executor.shutdown(); 

Не знаю, почему вы бы держать Темы в переменных ThreadLocal. Возможно, пришло время сделать шаг назад от вашего дизайна и спросить себя, можете ли вы сделать это проще.

+0

Почему все не любят ThreadLocals Java? – hephestos 2010-12-08 07:58:25