finalize()应该是”Called by the garbage collector“,但何时调用/是否调用/由 哪个线程来调用是不”保证“的,故最好的方法是自己写自己的close()方法 如果非要用finalize()的话: java.lang.Object: protected void finalize() throws Throwable { } 一般来说是在自己的类中override上述方法,比如: public void finalize(){ super.finalize(); //不要忘了:-) //释放资源 } finalize是比较复杂的,涉及到线程/GC/Exception处理等,有专门的文章讨论, 下面是javadoc: /** * Called by the garbage collector on an object when garbage collection * determines that there are no more references to the object. * A subclass overrides the <code>finalize</code> method to dispose of * system resources or to perform other cleanup. * <p> * The general contract of <tt>finalize</tt> is that it is invoked * if and when the Java<font size="-2"><sup>TM</sup></font> virtual * machine has determined that there is no longer any * means by which this object can be accessed by any thread that has * not yet died, except as a result of an action taken by the * finalization of some other object or class which is ready to be * finalized. The <tt>finalize</tt> method may take any action, including * making this object available again to other threads; the usual purpose * of <tt>finalize</tt>, however, is to perform cleanup actions before * the object is irrevocably discarded. For example, the finalize method * for an object that represents an input/output connection might perform * explicit I/O transactions to break the connection before the object is * permanently discarded. * <p> * The <tt>finalize</tt> method of class <tt>Object</tt> performs no * special action; it simply returns normally. Subclasses of * <tt>Object</tt> may override this definition. * <p> * The Java programming language does not guarantee which thread will * invoke the <tt>finalize</tt> method for any given object. It is * guaranteed, however, that the thread that invokes finalize will not * be holding any user-visible synchronization locks when finalize is * invoked. If an uncaught exception is thrown by the finalize method, * the exception is ignored and finalization of that object terminates. * <p> * After the <tt>finalize</tt> method has been invoked for an object, no * further action is taken until the Java virtual machine has again * determined that there is no longer any means by which this object can * be accessed by any thread that has not yet died, including possible * actions by other objects or classes which are ready to be finalized, * at which point the object may be discarded. * <p> * The <tt>finalize</tt> method is never invoked more than once by a Java * virtual machine for any given object. * <p> * Any exception thrown by the <code>finalize</code> method causes * the finalization of this object to be halted, but is otherwise * ignored. * * @throws Throwable the <code>Exception</code> raised by this method */
finalize()应该是”Called by the garbage collector“,但何时调用/是否调用/由 哪个线程来调用是不”保证“的,故最好的方法是自己写自己的close()方法 如果非要用finalize()的话: java.lang.Object: protected void finalize() throws Throwable { } 一般来说是在自己的类中override上述方法,比如: public void finalize(){ super.finalize(); //不要忘了:-) //释放资源 } finalize是比较复杂的,涉及到线程/GC/Exception处理等,有专门的文章讨论, 下面是javadoc: /** * Called by the garbage collector on an object when garbage collection * determines that there are no more references to the object. * A subclass overrides the <code>finalize</code> method to dispose of * system resources or to perform other cleanup. * <p> * The general contract of <tt>finalize</tt> is that it is invoked * if and when the Java<font size="-2"><sup>TM</sup></font> virtual * machine has determined that there is no longer any * means by which this object can be accessed by any thread that has * not yet died, except as a result of an action taken by the * finalization of some other object or class which is ready to be * finalized. The <tt>finalize</tt> method may take any action, including * making this object available again to other threads; the usual purpose * of <tt>finalize</tt>, however, is to perform cleanup actions before * the object is irrevocably discarded. For example, the finalize method * for an object that represents an input/output connection might perform * explicit I/O transactions to break the connection before the object is * permanently discarded. * <p> * The <tt>finalize</tt> method of class <tt>Object</tt> performs no * special action; it simply returns normally. Subclasses of * <tt>Object</tt> may override this definition. * <p> * The Java programming language does not guarantee which thread will * invoke the <tt>finalize</tt> method for any given object. It is * guaranteed, however, that the thread that invokes finalize will not * be holding any user-visible synchronization locks when finalize is * invoked. If an uncaught exception is thrown by the finalize method, * the exception is ignored and finalization of that object terminates. * <p> * After the <tt>finalize</tt> method has been invoked for an object, no * further action is taken until the Java virtual machine has again * determined that there is no longer any means by which this object can * be accessed by any thread that has not yet died, including possible * actions by other objects or classes which are ready to be finalized, * at which point the object may be discarded. * <p> * The <tt>finalize</tt> method is never invoked more than once by a Java * virtual machine for any given object. * <p> * Any exception thrown by the <code>finalize</code> method causes * the finalization of this object to be halted, but is otherwise * ignored. * * @throws Throwable the <code>Exception</code> raised by this method */
gdsean(摇滚java) :tanghuan说的finalize()是Object类的方法,是在类被回收时被垃圾收集程序调用的。try那个是finally。
哪个线程来调用是不”保证“的,故最好的方法是自己写自己的close()方法 如果非要用finalize()的话:
java.lang.Object:
protected void finalize() throws Throwable { } 一般来说是在自己的类中override上述方法,比如:
public void finalize(){
super.finalize(); //不要忘了:-)
//释放资源
} finalize是比较复杂的,涉及到线程/GC/Exception处理等,有专门的文章讨论,
下面是javadoc: /**
* Called by the garbage collector on an object when garbage collection
* determines that there are no more references to the object.
* A subclass overrides the <code>finalize</code> method to dispose of
* system resources or to perform other cleanup.
* <p>
* The general contract of <tt>finalize</tt> is that it is invoked
* if and when the Java<font size="-2"><sup>TM</sup></font> virtual
* machine has determined that there is no longer any
* means by which this object can be accessed by any thread that has
* not yet died, except as a result of an action taken by the
* finalization of some other object or class which is ready to be
* finalized. The <tt>finalize</tt> method may take any action, including
* making this object available again to other threads; the usual purpose
* of <tt>finalize</tt>, however, is to perform cleanup actions before
* the object is irrevocably discarded. For example, the finalize method
* for an object that represents an input/output connection might perform
* explicit I/O transactions to break the connection before the object is
* permanently discarded.
* <p>
* The <tt>finalize</tt> method of class <tt>Object</tt> performs no
* special action; it simply returns normally. Subclasses of
* <tt>Object</tt> may override this definition.
* <p>
* The Java programming language does not guarantee which thread will
* invoke the <tt>finalize</tt> method for any given object. It is
* guaranteed, however, that the thread that invokes finalize will not
* be holding any user-visible synchronization locks when finalize is
* invoked. If an uncaught exception is thrown by the finalize method,
* the exception is ignored and finalization of that object terminates.
* <p>
* After the <tt>finalize</tt> method has been invoked for an object, no
* further action is taken until the Java virtual machine has again
* determined that there is no longer any means by which this object can
* be accessed by any thread that has not yet died, including possible
* actions by other objects or classes which are ready to be finalized,
* at which point the object may be discarded.
* <p>
* The <tt>finalize</tt> method is never invoked more than once by a Java
* virtual machine for any given object.
* <p>
* Any exception thrown by the <code>finalize</code> method causes
* the finalization of this object to be halted, but is otherwise
* ignored.
*
* @throws Throwable the <code>Exception</code> raised by this method
*/
哪个线程来调用是不”保证“的,故最好的方法是自己写自己的close()方法 如果非要用finalize()的话:
java.lang.Object:
protected void finalize() throws Throwable { } 一般来说是在自己的类中override上述方法,比如:
public void finalize(){
super.finalize(); //不要忘了:-)
//释放资源
} finalize是比较复杂的,涉及到线程/GC/Exception处理等,有专门的文章讨论,
下面是javadoc: /**
* Called by the garbage collector on an object when garbage collection
* determines that there are no more references to the object.
* A subclass overrides the <code>finalize</code> method to dispose of
* system resources or to perform other cleanup.
* <p>
* The general contract of <tt>finalize</tt> is that it is invoked
* if and when the Java<font size="-2"><sup>TM</sup></font> virtual
* machine has determined that there is no longer any
* means by which this object can be accessed by any thread that has
* not yet died, except as a result of an action taken by the
* finalization of some other object or class which is ready to be
* finalized. The <tt>finalize</tt> method may take any action, including
* making this object available again to other threads; the usual purpose
* of <tt>finalize</tt>, however, is to perform cleanup actions before
* the object is irrevocably discarded. For example, the finalize method
* for an object that represents an input/output connection might perform
* explicit I/O transactions to break the connection before the object is
* permanently discarded.
* <p>
* The <tt>finalize</tt> method of class <tt>Object</tt> performs no
* special action; it simply returns normally. Subclasses of
* <tt>Object</tt> may override this definition.
* <p>
* The Java programming language does not guarantee which thread will
* invoke the <tt>finalize</tt> method for any given object. It is
* guaranteed, however, that the thread that invokes finalize will not
* be holding any user-visible synchronization locks when finalize is
* invoked. If an uncaught exception is thrown by the finalize method,
* the exception is ignored and finalization of that object terminates.
* <p>
* After the <tt>finalize</tt> method has been invoked for an object, no
* further action is taken until the Java virtual machine has again
* determined that there is no longer any means by which this object can
* be accessed by any thread that has not yet died, including possible
* actions by other objects or classes which are ready to be finalized,
* at which point the object may be discarded.
* <p>
* The <tt>finalize</tt> method is never invoked more than once by a Java
* virtual machine for any given object.
* <p>
* Any exception thrown by the <code>finalize</code> method causes
* the finalization of this object to be halted, but is otherwise
* ignored.
*
* @throws Throwable the <code>Exception</code> raised by this method
*/
你说的方法不知到我是没有理解还是怎么的,好象行不通。还有,自己编写CLOSE函数怎么保证它在对象销毁的时候被调用?因为这个对象我希望它从被创建后是一直在内存中运行,直到关机。但如果出现以外情况我希望被记录在日志中(如:断电、程序异常终止)。具体情况是我正在研究一个连接池的问题,这个例子是在《JAVA服务器高级编程》的第九章,不知有那位高手曾经看过?我不知道究竟在JSP中该如何使用这个连接池——我给它做了个用JSP调用的JAVABEAN接口,但该如何使用它提供的release方法呢?这个方法该怎么用呢?因为按照我的理解连接池的poolmanager(管理连接池的对象)一但创建就应该一直在内存中运行,那么它提供的release方法何时用呢?所以我现在就没有调用他的release方法,而是想在poolmanager对象被(由于什么原因)销毁的时候做一些扫尾工作!
请高手帮忙,谢谢!紧急!如需要这个连接池的原码我可以贴出来!!