2013-05-11 29 views
13

Mam zamiar użyć instancji DatagramSocket i wywołać jej metodę send z różnych wątków ... aby wysłać pakiety UDP do różnych klientów. Czy ta metoda jest bezpieczna, tzn. Wywołanie tej metody z różnych wątków nie spowoduje żadnych problemów/niespójności/warunków wyścigu?jest bezpieczny wątek DatagramSocket.send?

Dzięki!

Odpowiedz

9

gwarancji, że datagramy UDP docierają nienaruszone (jeśli w ogóle). Innymi słowy, nie może być żadnego przeplatania, nawet jeśli istnieje wielowątkowość u nadawcy. To wszystko, czego potrzebujesz. W rzeczywistości nie potrzebujesz bezpieczeństwa wątku. Jednak wywołanie systemowe C send() jest bezpieczne dla wątków, podobnie jak wszystkie wywołania systemowe, ponieważ są one atomowe.

+2

Ale czy to naprawdę gwarantuje, że opakowanie java będzie bezpieczne dla wątków? Myśle że nie. – turbanoff

+0

@turbanoff Nie ma znaczenia, czy opakowanie jest wątkowane, czy nie, ponieważ nie jest określone, aby zmienić stan w jakimkolwiek obiekcie. – EJP

+0

Nie rozumiem twojej argumentacji. Na przykład SimpleDateFormat nie jest określony, aby zmienić dowolny stan w dowolnych obiektach. Ale wszyscy wiedzą - nie jest to bezpieczne dla wątków. – turbanoff