zoukankan      html  css  js  c++  java
  • 如何让程序(如java Hello)只启动一次?

    如何让程序(如java Hello)只启动一次?

    摘自http://bbs.csdn.net/topics/50488704

    总结一下,关于让Java程序只运行一个实例的问题,其实质是JVM之间通信的问题。楼上的单例模式显然是没有作用的。

    应该使用文件锁来锁定一个代表程序运行实例的文件,当程序启动时,首先锁定该文件,后继启动的实例一旦发现该文件已被锁定则提示出错信息。(为什么不直接使用文件而是使用文件锁来判断呢?即:在程序启动的时候生成一个文件而在程序退出时删除这个文件,只要判断该文件的存在与否就可以判断实例的运行情况。这是因为我们不能确保删除文件的操作一定能被执行到,程序是可能被强制关闭或异常退出的,而文件锁不同,它是作为系统资源分配给JVM的,一旦JVM当掉,其资源会一并被操作系统回收,因此对文件的锁定也会被消除。)

     1 package packa;
     2 
     3 import java.nio.channels.*;
     4 import java.io.*;
     5 
     6  //应用实例控制类
     7 public class InstanceControl
     8 {
     9     private static FileLock lock = null;
    10 
    11     //判断该应用是否已启动
    12     public static boolean isRunning()
    13     {
    14         try
    15         {
    16             //获得实例标志文件
    17             File flagFile = new File(".lock");
    18             
    19             //如果不存在就新建一个
    20             if(!flagFile.exists())
    21                 flagFile.createNewFile();
    22             
    23             //获得文件锁
    24             lock = new FileOutputStream(flagFile).getChannel().tryLock();
    25             
    26             //返回空表示文件已被运行的实例锁定
    27             if(lock==null)
    28                 return false;
    29         }
    30         catch(Exception ex)
    31         {
    32             ex.printStackTrace();
    33         }
    34         return true;
    35     }
    36 
    37     public static void main(String[] args)
    38     {
    39         if (isRunning())
    40         {
    41             System.out.println("xxxxxxxxxxxxxxxxxx");
    42             try
    43             {
    44                 Thread.sleep(100000);
    45             }
    46             catch (Exception e)
    47             {
    48                 e.printStackTrace();
    49             }
    50         }
    51         else
    52             System.out.println("xxxxxxxx.....xxxxxxxxxx");            
    53     }
    54 }
  • 相关阅读:
    noip2014Day2解题报告
    浴谷八连测R4
    pythonic-让python代码更高效
    java源码学习(一)String
    湖北省汉十高速公路项目接近尾声,所想所感真的值得写写
    jQuery插件ImageBox的使用
    那位兄弟帮忙写个正则表达式哦!急用阿
    如何在页面调用JS函数的代码
    控件的EnableViewState详细分析
    某人给gridview如此集中数据源,我只用过几个,晕倒!!
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/6226433.html
Copyright © 2011-2022 走看看