Javaでファイルロックを使ってプロセス間の排他制御、二重起動防止を行う方法

プログラミング
スポンサーリンク

Javaで同時に同じプロセスを実行するのを防ぐことって出来るんでしょうか?

以前は、Javaを起動するネイティブの実行モジュールを作ってネイティブのプログラム内で排他制御していましたが、現在はファイルロックを使えば排他制御ができるようです。

スポンサーリンク

JavaのFileChannel,  FileLock

ファイルロックは、FileLockを返すオブジェクト(FileChannel)のtryLockメソッドを使用してロックする。

このメソッドは、他プロセスがそのファイルをロック中だとnullを返すので、ロックされているかどうかを判定できる。

 

 

FileLockオブジェクトやその元になったFileChannelをクローズしてしまうとロックは解除される。

ファイルをロック中のプロセスが外部からkillされても、ファイルロックは解除される。

 

 

クラス FileLockのJavaDoc

https://docs.oracle.com/javase/jp/7/api/java/nio/channels/FileLock.html

 

クラス FileChannelのJavaDoc

https://docs.oracle.com/javase/jp/7/api/java/nio/channels/FileChannel.html

 

ファイルロックを使ったプロセス排他制御のサンプル

Javaでファイルロックを使ってプロセス間の排他制御、二重起動防止を行うには以下のようにすればよいでしょう。

 

 

コメント