http://www.cppblog.com/biao/archive/2010/12/23/137254.html

  1. package swingtest;
  2.  
  3. import java.io.File;
  4.  
  5. import java.io.RandomAccessFile;
  6.  
  7. import java.nio.channels.FileChannel;
  8.  
  9. import java.nio.channels.FileLock;
  10. import java.util.concurrent.TimeUnit;
  11.  
  12. public class SingleApplication {
  13.  
  14. // 在应用程序的main方法里调用此函数保证程序只有一个实例在运行.
  15.  
  16. public static void makeSingle(String singleId) {
  17.  
  18. RandomAccessFile raf = null;
  19.  
  20. FileChannel channel = null;
  21.  
  22. FileLock lock = null;
  23.  
  24. try {
  25.  
  26. // 在临时文件夹创建一个临时文件,锁住这个文件用来保证应用程序只有一个实例被创建.
  27.  
  28. File sf = new File(System.getProperty("java.io.tmpdir") + singleId + ".single");
  29.  
  30. sf.deleteOnExit();
  31.  
  32. sf.createNewFile();
  33.  
  34. raf = new RandomAccessFile(sf, "rw");
  35.  
  36. channel = raf.getChannel();
  37.  
  38. lock = channel.tryLock();
  39.  
  40. if (lock == null) {
  41.  
  42. // 如果没有得到锁,则程序退出.
  43.  
  44. // 没有必要手动释放锁和关闭流,当程序退出时,他们会被关闭的.
  45.  
  46. throw new Error("An instance of the application is running.");
  47.  
  48. }
  49.  
  50. } catch (Exception e) {
  51.  
  52. e.printStackTrace();
  53.  
  54. }
  55.  
  56. }
  57.  
  58. public static void main(String[] args) throws Exception {
  59.  
  60. SingleApplication.makeSingle("single.test"); // 保证程序只有一个实例在运行.
  61.  
  62. // 测试: 模拟一个程序正在运行5秒
  63.  
  64. System.out.println("Start");
  65.  
  66. System.out.println("Waiting 5 seconds.");
  67.  
  68. TimeUnit.SECONDS.sleep(25);
  69.  
  70. System.out.println("End");
  71.  
  72. }
  73.  
  74. }

java程序 避免重复启动的方法的更多相关文章

  1. 在 win10 环境下,设置自己写的 程序 开机自动 启动的方法

    原文:在 win10 环境下,设置自己写的 程序 开机自动 启动的方法 1.是登录自己用户时才能开机启 C:\Users\username\AppData\Roaming\Microsoft\Wind ...

  2. Java中多线程重复启动

    在面试时候经常被问到多线程的相关问题: 今天在测试的时候发现下面的代码会抛出异常: java.lang.IllegalThreadStateException public static void m ...

  3. 9.9 Binder系统_Java实现_Android里java程序的编译启动

    如果知道了进程号:通过ls /proc/进程号/task 可以看到所有线程    cat /proc/进程号/task/线程号/comm  可以达到线程名字(主线程是main,主线程号就是进程号) d ...

  4. 【Winfrom-禁止重复启动程序】 程序不能重复启动

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  5. 【转】Java程序CPU飙升问题排查方法

    windows环境下cpu飙升问题 线上某台runtime机器(windows Server)cpu报警,这种情况初步就是代码里面死循环了,先把机器下线了保证不再有新的任务分配进来,然而cpu使用依然 ...

  6. [WinForm]C# .net防止一个程序(WinForm)重复运行的方法。

    最近比较忙,邮件预警系统暂停了没时间去处理,临时处理:直接执行exe文件! 可是问题来了: 我点击了两次,原来几乎在同时执行这个进程,我在程序中有线程时间睡眠2秒一次等待队列,打开进程果然两个MAIL ...

  7. java去除数组重复元素的方法

    转载自:https://blog.csdn.net/Solar24/article/details/78672500 import java.util.ArrayList; import java.u ...

  8. java 程序消耗 cpu 100% 查找方法

    问题原因:由于HashMap是非线程安全的,在多线程访问时,造成死循环. 查找问题方法: 1. top 找出最耗费cpu的进程号 如:27377 2. top -p 27377 -H 找出此进程下的所 ...

  9. 编写Java程序_定义两个方法,实现奇数偶数的判断,并计算和(有参数有返回值方法)

    需求说明: 定义两个方法,在控制台输入一个数字,这两个方法可以求出1到该数字之间所有偶数之和.奇数之和,并将对应结果和返回.在main方法中调用该方法,并在控制台打印出结果.(有参数有返回值方法) 运 ...

随机推荐

  1. 网络资源url转化为file对象下载文件

    注:只测试过网络图片资源. 一.使用org.apache.commons.io.FileUtils 二. 三.httpURLConnection.disconnect(); 四. import org ...

  2. maven命令创建web骨架项目

    maven命令创建web骨架项目有以下两种方式: mvn archetype:create -DgroupId=org.seckill -DartifactId=seckill -Darchetype ...

  3. 什么是JWT?Token与Session的区别?

    什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...

  4. Vue上传通过“服务端签名后直传”上传文件到阿里云 报错 400 Bad Request

    我报错的原因是 formData.append('file', file) 放在签名前面了 解决办法 formData.append('file', file) 一定在最后 /** * 上传文件到 o ...

  5. Python之multiprocessing模块的使用

    作用:Python多进程处理模块,解决threading模块不能使用多个CPU内核,避免Python GIL(全局解释器)带来的计算瓶颈. 1.开启多进程的简单示例,处理函数无带参数 #!/usr/b ...

  6. 在linux 安装python

    wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz tar -zxvf Python-3.7.1.tgz cd Python-3 ...

  7. 上传base64图片至七牛云,并返回图片link

    https://developer.qiniu.com/kodo/kb/1326/how-to-upload-photos-to-seven-niuyun-base64-code

  8. nginx 入门实战

    nginx入门实战 nginx 安装与卸载 下载安装 进入 http://nginx.org/en/download.html 下载自己想要的版本,我选择的stable版本 tar -zxvf ngi ...

  9. vue-cli3中axios如何跨域请求以及axios封装

    1. vue.config.js中配置如下 module.exports = { // 选项... // devtool: 'eval-source-map',//开发调试 devServer: { ...

  10. Python基础之Python解释器

    当我们在编写Python代码时,我们得到的是一个包含Python代码的,以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开 ...