Java: получать уведомления о входящем пакете - PullRequest
0 голосов
/ 03 октября 2010

Я работаю над библиотекой, которая в настоящее время использует стандартные сокеты tcp.Конечный пользователь моей библиотеки регистрирует себя в качестве слушателя, и его необходимо уведомить, если / когда приходит соответствующее сообщение.

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

Есть ли способ, которым я могу получать уведомления о новом входящем tcp-пакете, не создавая новый поток или не требуя от пользователя опроса библиотеки?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 03 октября 2010

Зарегистрируйте рабочий поток как «демон», чтобы сообщить JVM, что ему не нужно ждать завершения потока.

1 голос
/ 03 октября 2010

Я не знаю насчет части сокетов, но если при создании потока вы пометите его как поток демона (setDaemon (true)), то это не остановит выход приложения.

0 голосов
/ 03 октября 2010

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

С другой стороны, если вы создаете библиотеку, вы не будете иметь никакого контроля над тем, чтоПользователь будет делать, когда вы вызываете метод слушателя, поэтому я бы посоветовал вам использовать внутренний Executor и дать вашей библиотеке метод, подобный terminate ().Вызов метода слушателя будет делегирован в исполняемый файл, который вы передадите Исполнителю (это может быть newSingleThreadExecutor, newCachedThreadPool или как вам удобнее).

Таким образом, пользователи знают, что они должны вызвать init() и terminate () - где init () инициализирует Executor, а terminate () позаботится о его закрытии.Это позволяет вам иметь свои собственные потоки в вашей библиотеке и не давать им помешать основному приложению завершить работу

Взгляните на this , может дать вам лучшее представление о том, что я 'Я говорю о.

...