public static void main(String[] args) { if(程序未運行) { // 運行程序 while(true) { Thread.sleep(1000); } } else { System.out.println("程序已經(jīng)正在運行,該進程退出"); }}目前使用的解決方案基本是占用操作系統(tǒng)的某項資源來達到目的,比如占用端口號、文件。有沒有更優(yōu)雅的方式?
3 回答

HUH函數(shù)
TA貢獻1836條經(jīng)驗 獲得超4個贊
你的應該是一臺機器上只啟動一個實例吧,有本地的方案也有分布式的方案。
本地的方案一般是通過占用一個固定端口、文件鎖來完成,這也是所有程序的通用做法。
如果是分布式環(huán)境,這個事情就演化為master的選舉,此時是通過zookeeper等類似的中間協(xié)調人來完成。

明月笑刀無情
TA貢獻1828條經(jīng)驗 獲得超4個贊
也就是說你可能會執(zhí)行多次這個程序 但是你希望里面的操作能夠只運行一次是吧。
由于你是每次run的,也就是說每次會啟動一個JVM,那么就需要外部標識來判斷是否已運行過了,最簡單的方式就是寫一個文件,每次運行的時候讀取這個文件,存在則說明已經(jīng)運行過了。
其實很多分布式的程序基本都是使用這種方式,像hadoop好像就是,啟動的時候會保存一個文件,里面存儲了pid信息,重復啟動就會保存。
添加回答
舉報
0/150
提交
取消