Вопрос:

Поддерживают ли сокеты Java полный дуплекс?

java multithreading sockets

13149 просмотра

2 ответа

22362 Репутация автора

Можно ли сделать так, чтобы один поток записывал в OutputStreamJava Socket, а другой - из сокетов InputStream, без необходимости синхронизации потоков в сокете?

Автор: Tony the Pony Источник Размещён: 07.06.2011 01:14

Ответы (2)


9 плюса

1778 Репутация автора

Да, это безопасно.

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

Автор: Paul Cager Размещён: 07.06.2011 01:19

47 плюса

29030 Репутация автора

Решение

Конечно. Точная ситуация, которую вы описываете, не должна быть проблемой (чтение и запись одновременно).

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

Поскольку входной поток и выходной поток являются отдельными объектами в Socket, единственное, что вас может беспокоить, это то, что происходит, если у вас есть два потока, пытающихся читать или записывать (два потока, один и тот же поток ввода-вывода) одновременно время? Методы чтения / записи классов InputStream / OutputStream не синхронизированы. Однако возможно, что если вы используете подкласс InputStream / OutputStream, то методы чтения / записи, которые вы вызываете, синхронизируются. Вы можете проверить javadoc для любого класса / методов, которые вы вызываете, и выяснить это довольно быстро.

Автор: jefflunt Размещён: 07.06.2011 01:19
Вопросы из категории :
32x32