第七条-避免使用终结方法

终结方法通常是不可预测的,也是很危险的,一般情况下是不必要的。

终结方法的缺点:它不能保证会被即时的执行。从一个对象变得不可达开始,到它的终结方法被执行,所花费的时间是任意长的。所以,注重时间的任务不应该由终结方法来完成。

Java语言规范不仅不保证终结方法会被即时地执行,而且根本就不保证会被执行。不能依赖终结方法更新重要的持久状态。

如何判断是否应该使用终结方法:

如果未被捕获的异常在终结过程中被抛出来,那么这种异常可以被忽略,并且该对象的终结过程也会终止。

PS:正常情况下,未被捕获的异常会使线程终止,并打印出栈轨迹,而如果异常发生在终结方法中们不但不会使线程终止,甚至连警告都不会打印出来。

使用 终结方法也会造成严重的性能损失。

一般采用显式的终止方法来代替终止方法,并要求该类的客户端在每个实例不再有用的时候调用这个方法,显式终止方法要与try...catch结构结合起来使用,以确保及时终止。在finally内部调用终止方法,可以保证即使在使用对象的时候有异常抛出,该方法也会被执行。

终结方法的两种用途:

  1. 充当安全网:如果终止方法发现资源还未被终止,则应该在日志中记录一条警告。
  2. 与对象的本地对等体有关

除了以上两种用途,其他时候避免使用终结方法。

猜你喜欢

转载自blog.csdn.net/wo8vqj68/article/details/85112635
今日推荐