时间关键的任务不应该由终结函数来完成。
如果你为某个对象定义了finalize() 方法,JVM 可能不会调用它,因为垃圾回收器不曾释放过那些对象的内存。调用System.gc() 也不会起作用,因为它仅仅是给 JVM 一个建议而不是命令。根据 Java 文档,finalize() 是一个用于释放非 Java 资源的方法。但是,JVM 有很大的可能不调用对象的finalize() 方法,因此很难证明使用该方法释放资源是有效的。因此,你不应当依靠finalize() 来释放资源。取而代之,你应当明确的清除那些资源或创建一个try...finally 块(或类似的机制)来实现。
显式的终止方法通常与try...finally 结构结合起来使用,以确保及时终止。
比如:
FileInputStream in = null; try { in = new FileInputStream("1.txt"); in.read(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (in != null) { try { in.close(); in = null; } catch (IOException e) { e.printStackTrace(); } } }