作者petr (petr)
看板java
标题Re: [问题] object指向null後 class variable怎麽办?
时间Fri Nov 13 17:01:54 2009
※ 引述《adrianshum (Alien)》之铭言:
: ※ 引述《petr (petr)》之铭言:
: : 使用finalizer是绝对不智的
: : JVM内thread执行finalizer的priority通常很低
: : Java的spec甚至没有规定finalizer一定会被执行
: : 甚至可能JVM结束了,finilizer都不会被执行到
: : 如果想要有一个统计总共有几个instance的资讯
: : 1. 最简单的方式是使用Collection来装这些instance,不用了就把它remove掉
: : 或者
: : 2. 使用一个private的变数来记录这个instance是否已经不再需要,
: : 如果这instance不要了,就把这个变数设为false,然後--sum,但是每个client
: : 要使用这类class时,要先check这个instance是否合法,要把它丢掉的时候
: : 设为false
主要也是在close做掉吧,finalizer只是多买份保险,也不知道会不会发生作用
总之不要把重要的事情放在finalizer,然後期望VM会执行到它
所以才会说那些事情只摆在finalizer是不智的
另外close的方法最好不要像你那样子用
摆在finally里面吧,因为你不知道前面的过程会遇到什麽问题
: 没有什麽不智吧.
: 一般要取得资源的情况, 做的方法是靠 close() (叫什麽不重要),
: 然後 finalizer 也会顺便做 (如果有人漏了 close 的话):
: public class Foo {
: public enum Status {
: ACTIVE,
: CLOSED,
: }
: private static int totalCount = 0;
: private Status status;
: public Foo() {
: this.status = Status.ACTIVE;
: ++totalCount;
: }
: public void close() {
: if (Status.ACTIVE == this.status) {
: this.status = Status.CLOSE;
: --totalCount;
: }
: }
: public void finalize() {
: this.close();
: }
: }
: 用的时候
: Foo foo = new Foo();
: // 用 foo
: // 用完了
: foo.close();
: 搞定
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.23.102
1F:→ adrianshum:只是例子而已 :P 放 finally 又是另一个课题了 11/13 19:02