很多时候,我们只允许某个程序加载一次。也就是说,不允许这个程序的两个进程同时运行。 要实现这个功能中,该怎么做呢?本文将讨论Java中是如何实现的。 我找到了如下几个备选方案。
1.在临时文件中标记程序的状态。
此方法提出者的观点是这样的:当程序运行时,在某个文件临时文件中写一个标记1;在程序退出时把这个标记改成0。在程序加载时,检查这个文件中的标记值 是什么,如果是0,则意味这系统中没有程序的运行实例。此时可以继运行。如果是1,那就意味着程序已经加载了一个实例,这时就可以直接退出了。 理论上似乎是可以的,但现实往往没那么完美。假设,当程序运行时,临时文件中的标记已经改为1了,这个时候程序异常退出,或者此时强行关掉Java虚拟机呢?程序显然会终止运行,但是临时文件中的标记却停留在了1,而不是期望中的0。当再次加载程序时,显然它会错误地认为已经有一个实例在运行了。 所以,这条路走不通。 阅读全文 »