我想知道Linux下jdk的FileLock到底是怎么回事

环境:
OS: fc8
jdk: 1.6

测试代码:

package snnn;
import java.nio.*;
import java.nio.channels.*;
import java.io.File;
import java.io.RandomAccessFile;

public class s {
    public static  void main(String[] args){
        try{
            File file=new File("a.lock");
            FileChannel fc=new RandomAccessFile(file,"rw").getChannel();
            FileLock lock=fc.tryLock();
            System.out.println("got");
            lock.release();
            fc.close();
        }catch (Exception e) {

        }
    }
};

测试方式:
在shell中执行
$flock a.lock yes
那么该命令会把a.lock这个文件用system api中的flock锁住。然后输出满屏幕的yes
如果我接着再次执行这个命令,那么将得不到任何输出。因为无法再次得到锁。

可是如果我此时用ant执行上面的java代码,显示的却是我成功获得了锁。我在屏幕上看见了输出

run:
     [java] got

我不管是用fc.tryLock()还是fc.lock(),结果都一样。

咋回事嘛?

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥