给程序时间以关闭线程,但使用System.EXIT备份计划



有时Java应用程序的系统过程不会完全关闭。这主要是因为一个或多个线程没有死。

一个人可以致电:

System.exit(0);

但这杀死了所有线程。

我希望所有线程正确关闭,以便不打算使用System.EXIT。但是有时由于情况,一个或多个线程无法正确死亡。这会导致应用程序不完全关闭,并在后台徘徊,有时甚至锁定资源。

我的第一个想法是编写一个exitwatcher,该出版社在程序停止并调用系统时开始。我很快发现,出口观察者现在阻止了程序关闭; - (

您如何给出Java程序正确关闭的时间(即正确关闭所有线程(,但同时有一个备份计划,可以调用System.exit,如果关闭时间太长?

当您不希望线程以防止程序退出时,可以使用守护程序线程(因此,在ExitWatcher线程上使用setDaemon(true)可以解决您的即时问题(。但是,我怀疑您真的需要或想要出口观察者,因为这样的情况通常相对容易地使用适当的设计来防止。

正确的关闭过程包括中断有效的线程(并设计它们,使其在中断时表现得很好(,在必要时使用守护程序线程,正确关闭连接等。使用像exitwatcher这样的机制,更像是一种黑客的方法,因为它表明您的程序在关闭时并不总是很好。

最新更新