2017-07-21 3 views
0

Ich habe einen einfachen Thread erstellt, wenn der Server mit Spring InitializingBean gestartet wird, aber als Daemon-Thread gestartet wurde, warum er als Daemon-Thread gestartet wurde und Probleme in der Anwendung auftreten. Oder sonst kann ich den Faden durch setDaemon(false) beginnen, bitte vorschlagen.Einfacher Thread als Daemon-Thread gestartet

public class Update implements InitializingBean { 
    @Autowired 
    Service service 
    public void afterPropertiesSet() throws Exception { 
     String hostname = Util.getServerName(); 
     service.updateStatus(hostName); 
     Thread t1=new Thread(new UpdateService(service)); 
     t1.start();  
    } 
} 
+0

Könnte es sein, dass Ihr Service gerade beendet wird? Ein neuer Thread ist standardmäßig nie ein Daemon –

+0

Nein, der Thread wurde gestartet und läuft als Daemon-Thread. Wenn ich ** t1.setDaemon (false) setze **, begann es als normaler Thread. – user3539665

Antwort

0

Wenn Sie einen Haupt-Thread starten (Nicht-Daemon-Thread), wird die JVM erst beendet, wenn dieser Thread fertig ist. Wenn Sie also Thread.setDaemon(false); verwenden, müssen Sie sicherstellen, dass Sie den Thread ordnungsgemäß entsorgen, wenn der ApplicationContext entsorgt wird. Sie können hierzu die Methode DisposableBean interface destroy() verwenden.

Oder Sie können einfach einen Daemon Thread verwenden.

0

Ein Daemon-Thread ist ein Thread, der nicht verhindert, dass die JVM beendet wird, wenn das Programm beendet wird, der Thread jedoch noch ausgeführt wird. Ein Beispiel für einen Daemon-Thread ist die Garbage Collection.

Sie können die setDaemon (boolean) -Methode verwenden, um die Thread-Daemon-Eigenschaften vor dem Start des Threads zu ändern. Beispiel:

DaemonThread t = new DaemonThread(); 
     t.setDaemon(false); 
Verwandte Themen