I socket Java supportano full duplex?

È ansible avere una scrittura di thread su OutputStream di un Socket Java, mentre un’altra legge dallo InputStream del socket, senza che i thread debbano sincronizzarsi sul socket?

Sicuro. La situazione esatta che stai descrivendo non dovrebbe essere un problema (leggere e scrivere contemporaneamente).

Generalmente, il thread di lettura bloccherà se non c’è nulla da leggere e potrebbe scadere durante l’operazione di lettura se è stato specificato un timeout.

Poiché il stream di input e il stream di output sono oggetti separati all’interno del socket, l’unica cosa di cui ti devi occupare è, cosa succede se hai 2 thread che cercano di leggere o scrivere (due thread, stesso stream di input / output) allo stesso tempo? I metodi di lettura / scrittura delle classi InputStream / OutputStream non sono sincronizzati. È ansible, tuttavia, che se si utilizza una sottoclass di InputStream / OutputStream, i metodi di lettura / scrittura che si stanno chiamando siano sincronizzati. Puoi controllare javadoc per qualunque class / metodo stai chiamando e scoprirlo abbastanza velocemente.

Sì, è sicuro.

Se si desidera che più di una lettura del thread da InputStream si debba essere più attento (supponendo che si sta leggendo più di un byte alla volta).