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