2016-06-17 13 views
-1

Ich habe einen Thread, der eine Verbindung Pool-Verbindung verwendet und führt Abfrage für die DB, die für ca. 1 min läuft. vor 1 Minute, wenn sich der Benutzer aus der Anwendung abmeldet, geht dieser Thread einfach in eine Endlosschleife und wird niemals freigegeben. Wie kann ich sicherstellen, dass beim Klicken auf den Abmeldetasten alle Threads gelöscht werden?Java-Threads release richtig

Antwort

0

Wenn sich der Benutzer abmeldet, setzen Sie ein Flag auf false. Dieses Flag sollte vom Thread überprüft werden, um nicht weiter zu laufen.

Das Anzeigen von Code wird hilfreicher sein.

0

Sie können Ihrer Hauptklasse, die Threads erstellt, einen Shutdown-Hook hinzufügen.

gibt nur ein Beispiel hier:

diese Zeile in Hauptklasse hinzufügen.

Runtime.getRuntime() addShutdownHook (neue Message());

statische Klasse Nachricht erweitert Thema {

 public void run() { 
      System.out.println("Bye."); 
      try { 
      // do your work here 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
} 
0

Zunächst müssen Sie den Überblick über die Themen, um Sie zu starten, und die Komponenten, die Fäden selbst starten.

Zweitens müssen Sie diese ordnungsgemäß herunterfahren. Für Threads, die polling/loop verwenden, müssen Sie diese Schleifen verlassen (möglicherweise durch Setzen von Flags). Sie müssen auch Interrupt Threads, die möglicherweise auf E/A warten, und diesen Interrupt richtig behandeln. Informationen zu diesem häufig missverstandenen Problem finden Sie unter this article from Java Specialist (im Grunde setzen Sie das Interrupt-Flag auf dem unterbrochenen Thread zurück ...)