2012-03-28 42 views
2

假设我有一个对象“A”,它在构造函数中启动某个进程。一旦对象被释放,我需要调用一个清理方法(设置为null或超出其生命范围)。Java,如何在对象上销毁进程

问题是java没有析构函数,并且在对象设置为null或超出范围后,并不保证所谓的“finalize”方法正确运行。只有当GC认为“时间到了”。

另外我不能使用shutdown hook,因为我的代码在Java EE服务器上运行,并不是一个简单的Java SE应用程序,它将一次运行并终止。在这种情况下可以做些什么?

+0

如果您举例说明您正在努力实现的目标,那么我们可能会帮助您为您的问题提出解决方案或不同方法。 – Marthin 2012-03-28 11:03:38

回答

1

它只是不可能使用Java。

只要GC想要删除对象,但在程序终止时(不应该在Java EE应用程序中发生),就会调用finalize。

所以唯一的办法就是自己做。例如,您可以使用ObjectPool,其中对象A的所有实例都存储在一个列表中(如果需要,还会附加一个时间戳)。当时间到来时(例如通过使用wget & cron的特殊URL触发),您只需遍历此列表并销毁不再需要的每个对象。

这只是一种(非常简单)的可能方式。