Ich hatte den Eindruck, dass in Java ein Thread eine Pause macht und anderen Threads die Möglichkeit gibt, während blockierender E/A-Operationen (wie Socket.read() oder DataGramsocket.receive()) etwas zu tun. Aus irgendeinem Grund führt in meiner Multi-Thread-Netzwerkanwendung ein Aufruf von receive() dazu, dass alle anderen Threads verhungern (der Thread, der receive() aufgerufen hat, wird zum Big Boss und gibt niemals die Kontrolle ab, wodurch er für immer blockiert! )
Warum sollte das geschehen? Ich hatte früher genau dieselbe Anwendung, aber statt UDP war sie TCP-basiert. Socket.read() hat den Thread immer angehalten und anderen erlaubt, ein wenig zu arbeiten, wenn er zu lange blockiert war.
-- zusätzliche Informationen -- Die TCP-Version meines benutzerdefinierten Threads war dieser Code: http://www.dwgold.com/code/proxy/proxyThread.java.txt
Mein neuer Code (UDP-Version) ist im Wesentlichen derselbe, wurde aber ein wenig modifiziert, um UDP-Methoden und -Stil zu verwenden. Ich habe dann zwei dieser Threads erstellt und beide mit Start aufgerufen. Der erste Thread blockiert immer und lässt den anderen in der UDP-Version nie arbeiten.