¿Los sockets de Java admiten dúplex completo?

¿Es posible tener un hilo de escritura en el OutputStream de un Socket Java, mientras que otro lee desde el InputStream del zócalo, sin que los hilos tengan que sincronizarse en el zócalo?

Por supuesto. La situación exacta que describes no debería ser un problema (leer y escribir simultáneamente).

En general, el hilo de lectura se bloqueará si no hay nada que leer, y podría expirar el tiempo de espera en la operación de lectura si tiene un tiempo de espera especificado.

Dado que el flujo de entrada y el flujo de salida son objetos separados dentro del socket, lo único que le preocupa es qué sucedería si tuviera 2 hilos intentando leer o escribir (dos hilos, el mismo flujo de entrada / salida) al mismo tiempo ¿hora? Los métodos de lectura / escritura de las clases InputStream / OutputStream no están sincronizados. Sin embargo, es posible que si usa una subclase de InputStream / OutputStream, los métodos de lectura / escritura que está llamando estén sincronizados. Puede consultar el javadoc para cualquier clase / método que esté llamando, y descubrirlo rápidamente.

Sí, eso es seguro.

Si querías más de una lectura de hilo de InputStream, tendrías que tener más cuidado (suponiendo que estás leyendo más de un byte a la vez).