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

java multithreading sockets

13149 просмотра

2 ответа

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

Автор: Tony the Pony Источник Размещён: 12.11.2019 09:58

Ответы (2)


47 плюса

Решение

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

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

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

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

9 плюса

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

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

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