`
yuanke52014
  • 浏览: 23198 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类

Java保证程序结束时调用释放资源函数

阅读更多
众所周知,Java不像C++一样,用户无法定义析构函数,也就是无法使用简单的方法实现资源自动释放。虽然Java不需要Delete操作释放用户new出来的对象,但是如数据库连接以及关闭文件这些操作依然需要用户手动完成。特别是单例模式定义了全局对象的时候,这样的需求也许会更加强烈。

一个简单的程序,添加需要在应用程序结束前执行的操作,例如关闭网络连接,关闭数据库等等。

然而对于一个比较复杂的多线程应用,线程运行状态比较复杂。我们就很难预料到程序什么时候结束。如何能在应用程序结束事件到来时,处理我们要做的工作呢?这就用到了Java对应用程序的退出的事件出处理机制。

为了保证程序在结束的时候调用响应的资源释放函数,我们可以使用Runtime类的addShutdownHook函数。首先要获取到当前应用程序相关的运行时对象,使用Runtime类中的静态函数getRuntime返回当前的Runtime。

通过Runtime的addShutDownHook函数注册一个新的虚拟机来关闭钩子。
具体示例代码如下:

package test;
public class TestShutDownHook {
    public TestShutDownHook() {
        doShutDownWork();
    }
    private void doShutDownWork() {
        Runtime run=Runtime.getRuntime();//当前 Java 应用程序相关的运行时对象。
        run.addShutdownHook(new Thread(){ //注册新的虚拟机来关闭钩子
            @Override
            public void run() {
                //程序结束时进行的操作
                System.out.println("程序结束调用");
            }
        });
    }
    public static void main(String[] args) {
        new TestShutDownHook();
        for (int i = 0; i < 1000; i++) { // 在这里增添您需要处理代码 }
            System.out.println(i);
        }
    }
}
在上述程序中,我们可以看到通过在程序中增加Runtime.getRuntime().addShutdownHook(new Thread()) 事件监听,捕获系统退出消息到来,然后,执行我们所需要完成工作,从而使我们的程序更健壮!

原文链接:http://vcsos.com/article/pagesource/140421/20140421101822.shtml
分享到:
评论

相关推荐

    delphi调用Java函数

    6. **释放资源**:在调用完毕后,记得释放分配的资源,如释放本地方法栈、关闭JVM等,防止内存泄漏。 示例代码可能如下: ```delphi uses JvJavaDLL; procedure Main; var JVM: PJNIEnv; JavaClass: jclass; ...

    Java调用Qt DLL

    8. **资源释放**:在JNI中调用Qt函数后,确保正确释放任何分配的资源,避免内存泄漏。 9. **编译和链接**:使用合适的工具链(如MinGW或MSVC)编译C++的JNI代码,并将其与Qt库链接。确保所有依赖项都被正确地链接。...

    易语言JAVA调用 例子

    易语言JAVA调用是将Java代码与易语言程序进行交互的一种技术,这使得开发者能够利用易语言编写主程序,同时利用Java的丰富库资源。在本例子中,我们看到几个关键文件,它们分别是: 1. **Test.class**:这是一个...

    java使用jco调用rfc案例

    Java使用JCO调用RFC(Remote Function Call)是将Java应用程序与SAP系统进行集成的常见方式。在本文中,我们将深入探讨这个过程,包括如何传递不同类型的参数以及解析返回的格式。 首先,JCO(Java Connector)是...

    java连接sap RFC函数 所需文件

    Java连接SAP RFC函数是Java开发者在集成SAP系统时常用的一种技术,它允许Java应用程序通过RFC(远程功能调用)接口与SAP系统进行通信。SAP RFC是一种标准的接口技术,使得不同系统间可以交换数据和服务。在这个场景...

    c++调用jar包

    标题 "c++调用jar包" 涉及的关键技术是C++程序如何与Java的jar包进行交互。在描述中提到,这是一个C++编写的动态库,它能够调用jar包中的功能,这意味着我们需要利用特定的技术来实现跨语言的通信。这个过程通常通过...

    java调用sap rfc说明

    Java调用SAP RFC(Remote Function Call)是一种技术,允许Java应用程序与SAP系统进行通信,执行SAP系统中的特定业务逻辑。SAP RFC是SAP NetWeaver平台提供的一种接口技术,它允许外部系统调用SAP的功能模块,就像...

    DELPHI 11调用JAVA 接口

    Delphi 11作为一款强大的Windows桌面应用程序开发工具,有时需要与Java环境进行交互,这通常涉及到跨语言调用接口。本篇将详细介绍如何在Delphi 11中调用Java接口,并传递参数及接收返回结果。 1. **JNI(Java ...

    《Java语言程序设计》答案.pdf

    这样,在编译时,Java 就可以确定到底调用哪个方法。 二、throw/throws 的关系和区别 throw 和 throws 是 Java 中的两个关键字,用于处理异常。 throw 关键字通常用于方法体中,并且抛出一个异常对象,程序在执行...

    2.1Java中调用Opencv的方法(代码下载)

    在Java程序开始时,你需要调用`System.loadLibrary(Core.NATIVE_LIBRARY_NAME)`来加载OpenCV的 native 库。例如: ```java static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); } ``` 3. **引入OpenCV...

    C++调用java方式

    6. **释放资源**: 在完成调用后,记得释放分配的JNI资源,如局部引用。 **示例文件分析** - `Sample2.c`和`Sample2.cpp`: 这两个文件可能是C++实现的部分,其中包含了使用JNI调用Java方法的代码。通常会包含JNI...

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    - **及时释放资源**:确保在数据处理完毕后立即释放不再使用的资源。 综上所述,通过使用JNA替代传统的JNI来调用DLL,不仅能够简化开发流程,还能有效提高开发效率。同时,合理的设计和实践也能有效避免内存溢出等...

    一种Java调用Matlab的方法简介.pdf

    首先,要了解Java调用Matlab方法时,Matlab的返回值类型可能会根据函数和Matlab版本的不同而有所差异。例如,在Matlab R2009a环境下,使用`returningFeval`函数调用Matlab函数时,返回的可能是一个`object`数组,...

    JDBC调用过程与函数源码

    在Java应用中,我们经常需要使用JDBC来执行SQL语句,包括过程和函数的调用。本篇将深入探讨JDBC调用SQL过程和函数的细节。 1. **JDBC驱动注册与连接** 在调用SQL过程和函数之前,首先要进行JDBC驱动的注册和数据库...

    针对Java程序调用RFC的API——JCo.docx

    Java程序调用SAP ABAP函数的API,JCo(Java Connector)是SAP提供的一种接口,用于在Java应用程序中与SAP系统进行交互。JCo由两部分组成:平台无关的Java库(sapjco.jar)和平台相关的RFC库(如sapjcorfc.dll和...

    java调用电脑摄像头拍照

    以上步骤是基础的Java调用摄像头拍照的流程。如果需要更高级的功能,比如预览、调整摄像头参数或者处理实时视频流,JavaCV库提供了丰富的API供开发者使用。同时,考虑到跨平台兼容性,确保在不同操作系统上测试代码...

    delphi调用Java接口.rar

    6. **释放资源**:调用完毕后,记得断开与JVM的连接,可以使用`DetachCurrentThread`函数。 在Delphi项目中,你将需要包含`jni.pas`单元,并根据上述步骤编写Delphi代码来调用Java接口。注意,为了确保兼容性,你...

    JAVA如何调用dll:用JNI调用C或C++动态联接库

    注意,在调用完DLL后,确保释放资源,这里通过`n.close()`关闭JNative对象。 总结来说,调用C或C++ DLL文件的主要步骤包括:准备DLL和JNative库,编写Java代码,使用JNative对象创建函数调用,并设置参数及返回值...

    python调用java代码方法

    调用完Java代码后,记得关闭JVM以释放资源: ```python jpype.shutdownJVM() ``` 总之,通过Jpype库,Python可以方便地调用Java代码,实现两者的混合编程。这种方法在需要利用Java库或服务,但主要开发环境是Python...

    java与stk集成应用

    - **资源管理**:确保在使用完STK的资源后,如模型、数据流等,能够正确释放,避免内存泄漏。 - **版本兼容性**:保持Java和STK版本的兼容性,避免因版本升级导致的问题。 综上所述,Java与STK的集成应用是一个...

Global site tag (gtag.js) - Google Analytics