やりたいこと
1.AプロセスでgetLockしたあと、BプロセスでgetLockした場合、Bプロセスは、
Lockの取得に失敗する(下記のソースコードで実現可能)
2.Aプロセスで取得したgetLockしたあと、Cプロセスで「AプロセスがgetLockによって
排他制御中」であることを確認したい
問題点
・vaildLockは、AプロセスがLock中であった場合、tryLockでnullが返却されるので、
「排他制御中」であることがわかるが、AプロセスがLock中でない場合に不必要なLockを
してしまう(下記のソースコードの★の部分)。
そのため、開放のタイミングを考えなければならない。
知りたいこと
** プロセスがLock中であるかどうかをLockすることなく、別のプロセスから確認したい **
--制限事項--
・FileLockを使う必要があります。
・FileChannelも使う必要があります。
・Lockの開放は、release()メソッドで行います。
lang
1 public boolean getLock(){ 2 try { 3 File ff = new File("C:\tmp\Locks"); 4 FileOutputStream fos = new FileOutputStream(ff); 5 FileChannel fchan = fos.getChannel(); 6 FileLock flock = fchan.tryLock(); 7 if(flock != null )return true; 8 } catch (Exception e) { 9 e.printStackTrace(); 10 } 11 return false; 12 } 13 public boolean vaildLock(){ 14 try { 15 File ff = new File("C:\tmp\Locks"); 16 FileOutputStream fos = new FileOutputStream(ff); 17 FileChannel fchan = fos.getChannel(); 18 FileLock flock = fchan.tryLock(); //Lockしたくない★ 19 if(flock == null )return true; 20 } catch (Exception e) { 21 e.printStackTrace(); 22 } 23 return false; 24 }

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/12/06 13:04
2014/12/06 14:04
2014/12/07 09:12
2014/12/07 11:58
2014/12/08 15:06