java程序 避免重复启动的方法

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

原文地址:https://www.cnblogs.com/yangxiaobo-blog/p/11664348.html

时间: 2024-11-01 01:57:58

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

java程序入口main()方法浅析

java程序入口main()方法浅析 main()方法的方法签名 public static void main(String[] args) 方法签名讲解 ?public修饰符:java类由java虚拟机(JVM)调用,为了没有限制可以自由的调用,所以采用public修饰符. ?static修饰符:JVM调用这个主方法时肯定不是先创建这个主类的对象,再通过对象来调用方法,而是直接通过该类来调用这个方法,因此需要使用static修饰符修饰这个类. ?void返回值:主方法被JVM调用,将返回值返

Java中多线程重复启动

在面试时候经常被问到多线程的相关问题: 今天在测试的时候发现下面的代码会抛出异常: java.lang.IllegalThreadStateException public static void main(String[] args)throws Exception{ Test_Thread temp = new Test_Thread(); Test_Thread temp1 = new Test_Thread(); Thread t = new Thread(temp); Thread t

Winfrom 程序不能重复启动

using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Windows.Forms; namespace Demo { static class Program { /// <summary> /// 用于判

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

问题原因:由于HashMap是非线程安全的,在多线程访问时,造成死循环. 查找问题方法: 1. Java代码   top 找出最耗费cpu的进程号 如:27377 2. Java代码   top -p 27377 -H 找出此进程下的所有线程,然后找出最耗cpu线程号 如:27433 3. Java代码   python  hex(27433) 将十进制数转为16进制 如:0x6b29 4. Java代码   jstack 27377 >cpu.log 将此进程号的Java堆栈信息打印到文件中

java程序bat文件启动

1.将项目导出成jar包. 2.在项目的META-INF文件夹中找到MANIFEST.MF,在其中加入一下一行文字: Main-Class: 类的全限定名 3.新建一个文件,修改扩展名为bat java -jar xx.jar pause 将bat文件与jar包放在一起. 4.运行bat文件即可执行Main-Class.

Java 程序优化 (读书笔记)

--From : JAVA程序性能优化 (葛一鸣,清华大学出版社,2012/10第一版) 1. java性能调优概述 1.1 性能概述 程序性能: 执行速度,内存分配,启动时间, 负载承受能力. 性能指标: 执行时间,CPU时间,内存分配,磁盘吞吐量,网络吞吐量,响应时间. 优化策略: 木桶原理,优化性能瓶颈. 1.2 性能调优的层次 设计调优, 代码调优, JVM调优, 数据库调优, 操作系统调优. 2. 设计优化 2.1 善用设计模式 单例模式: 对于巨大对象,节省创建对象的时间空间: 代理

Java程序员必备的Intellij插件

善用Intellij插件可大幅提升我们的效率 以下是我用过不错的Intellij插件 1. .ignore 地址:https://plugins.jetbrains.com/plugin/7495--ignore 生成各种ignore文件,一键创建git ignore文件的模板,免得自己去写 截图: 2. lombok 地址:https://plugins.jetbrains.com/plugin/6317-lombok-plugin 支持lombok的各种注解,从此不用写getter sett

Java程序与其它进程的数据通信

Java程序中可以启动其他的应用程序,这种在Java中启动的进程称为子进程,启动子进程的Java程序称为父进程,其实这个父进程就是一个Java虚拟机1.在Java程序中可以用Process类的实例对象来表示子进程,子进程的标准输入和输出不再连接到键盘和显示器(也就是不再接收键盘输入,和显示器输 出),而是以管道流的形式连接到父进程的一个输出流和输入流对象上2.调用Process类的getOutputStream和getInputStream方法可以获得连接到子进程的输出流和输入流对象.子进程从标

Java中基本数据类型的存储方式和相关内存的处理方式(java程序员必读经典)

1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间. 释放:对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作.但同时,它也加重了JVM的工作.因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请.引用.被引用.赋值等,GC都需要进行监控. 2.什么叫java的内存泄露 在