3 回答

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

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超4個(gè)贊
也就是說你可能會(huì)執(zhí)行多次這個(gè)程序 但是你希望里面的操作能夠只運(yùn)行一次是吧。
由于你是每次run的,也就是說每次會(huì)啟動(dòng)一個(gè)JVM,那么就需要外部標(biāo)識(shí)來判斷是否已運(yùn)行過了,最簡(jiǎn)單的方式就是寫一個(gè)文件,每次運(yùn)行的時(shí)候讀取這個(gè)文件,存在則說明已經(jīng)運(yùn)行過了。
其實(shí)很多分布式的程序基本都是使用這種方式,像hadoop好像就是,啟動(dòng)的時(shí)候會(huì)保存一個(gè)文件,里面存儲(chǔ)了pid信息,重復(fù)啟動(dòng)就會(huì)保存。
添加回答
舉報(bào)