Hi,
ich habe folgendes Problem. Ich habe eine Applikation, in der ein Worker-Thread ein Netzwerkprotokoll Daten bearbeitet. Diesen will ich (z.B. beim Schließen der Applikation) sauber beenden. Hätte ich ein C-Programm, würde ich so vorgehen, dass ich im Thread immer mittels select() und Timeout von z.B. 50ms nachschaue, ob Daten da sind. Wenn das zurückkehrt, würde ich erstmal eine Statusvariable checken, ob ich den Thread beenden soll. Erst dann würde ich auswerten, ob select() nun zurückgegeben hat, ob Daten da sind oder nicht und diese dann entweder bearbeiten oder weiter auf Daten warten.
Dummerweise kann ich mit herkömmlicher I/O in Java den select()-Aufruf nicht simulieren. Zumindest ist mir nichts eingefallen. NIO kann ich nicht verwenden, weil SSL im Spiel ist uns es leider keinen SslSocketChannel gibt (nur eine kommerzielle Implementierung), und selber sowas schreiben kann ich nicht, dazu ist SslEngine zu kompliziert.
Der einzige Weg, den Thread zu beenden, der mir einfällt, ist den Socket zu schließen und im Thread auf eine Exception zu warten. Aber das erscheint mir alles andere als elegant ......
Hat jemand einen Hinweis, wie ich sinnvoll mit herkömmlichen Mitteln den select()-Aufruf simulieren kann? Oder einen anderen eleganten Weg, den Thread zu beenden?
Thomas
ich habe folgendes Problem. Ich habe eine Applikation, in der ein Worker-Thread ein Netzwerkprotokoll Daten bearbeitet. Diesen will ich (z.B. beim Schließen der Applikation) sauber beenden. Hätte ich ein C-Programm, würde ich so vorgehen, dass ich im Thread immer mittels select() und Timeout von z.B. 50ms nachschaue, ob Daten da sind. Wenn das zurückkehrt, würde ich erstmal eine Statusvariable checken, ob ich den Thread beenden soll. Erst dann würde ich auswerten, ob select() nun zurückgegeben hat, ob Daten da sind oder nicht und diese dann entweder bearbeiten oder weiter auf Daten warten.
Dummerweise kann ich mit herkömmlicher I/O in Java den select()-Aufruf nicht simulieren. Zumindest ist mir nichts eingefallen. NIO kann ich nicht verwenden, weil SSL im Spiel ist uns es leider keinen SslSocketChannel gibt (nur eine kommerzielle Implementierung), und selber sowas schreiben kann ich nicht, dazu ist SslEngine zu kompliziert.
Der einzige Weg, den Thread zu beenden, der mir einfällt, ist den Socket zu schließen und im Thread auf eine Exception zu warten. Aber das erscheint mir alles andere als elegant ......
Hat jemand einen Hinweis, wie ich sinnvoll mit herkömmlichen Mitteln den select()-Aufruf simulieren kann? Oder einen anderen eleganten Weg, den Thread zu beenden?
Thomas