Ich bin eine Anwendung erstellen, die TCP und UDP überwacht, und ich habe einige Probleme mit meinem Shutdown-Mechanismus gerannt. Wenn ich auf jedem der zuhörenden Threads Thread.interrupt()
aufrufen, wird der TCP-Thread vom Abhören unterbrochen, während der UDP-Listener dies nicht tut. Um genau zu sein, verwendet der TCP-Thread ServerSocket.accept()
, der einfach zurückkehrt (ohne tatsächlich zu verbinden). Während der UDP-Thread DatagramSocket.receive()
verwendet und diese Methode nicht beendet.Unterbrechen Sie einen Thread in DatagramSocket.receive
Ist dies ein Problem in meiner JRE, meinem Betriebssystem, oder sollte ich nur auf (Datagram)Socket.close()
wechseln?
UPDATE: Ich habe eine analysis des Problems gefunden. Es bestätigt, dass das Verhalten nicht konsistent ist.
Nur um anderen zu helfen, die sich mit dem gleichen Problem befassen: Mein 'ServerSocket.accept()' kam nicht ohne Verbindung zurück. Es wurde zurückgegeben, weil mein Browser (FF4b10) das Favicon dreimal anfordert. Eine der Anfragen war die Überprüfung von Thread.interrupted(). Ich wechsle auf 'close()' um. – SEK