Re: [問題] object指向null後 class variable怎麼辦?
※ 引述《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
→
11/13 19:02, , 1F
11/13 19:02, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):