2013-05-11 13 views
13

Ho intenzione di utilizzare un'istanza di DatagramSocket e chiamare il suo metodo send da diversi thread ... per inviare pacchetti UDP a client diversi. Il metodo thread safe, ovvero chiamando questo metodo da thread diversi, non creerà problemi/incoerenze/condizioni di competizione?è un thread di DatagramSocket.send sicuro?

Grazie!

risposta

9

garanzie UDP datagram arrivano intatte (se non del tutto). In altre parole non può esserci interleaving anche se c'è un multithreading al mittente. Questo è tutto ciò di cui hai bisogno. Non hai effettivamente bisogno di sicurezza del thread. Tuttavia, la chiamata di sistema C send() è thread-safe, come tutte le chiamate di sistema, perché sono atomiche.

+2

Ma è davvero garantito che il wrapper java sarà thread-safe? Penso che nessuno. – turbanoff

+0

@turbanoff È irrilevante se il wrapper è thread-safe o meno, in quanto non è specificato modificare alcun stato in alcun oggetto. – EJP

+0

Non capisco la tua argomentazione. Ad esempio, SimpleDateFormat non viene specificato per modificare alcun stato in alcun oggetto. Ma tutti lo sanno - non è sicuro per i thread. – turbanoff