检查 FileChannel lock() 方法的 OverlappingFileLockException

此规则会标记是否使用了 java.nio.channels.FileChannel.lock() 方法。在 Java SE 6 中,lock() 方法现在会抛出 java.nio.channels.OverlappingFileLockException

此规则会标记没有 try/catch 块并且抛出了 OverlappingFileLockException 或者周围的方法未抛出 OverlappingFileLockExceptionlock() 方法。

示例 1:

public MyClass{
private void doX(){
FileChannel fc= getFileChannel();
fc.lock();
}
}

示例 2:

public MyClass extends FileChannel{
private void doX(){
super.lock();
}
// more code
}

示例 3:

public MyClass extends FileChannel{
private void doX() throws OverlappingFileLockException{
super.lock();
}
private void doY() {
try{
super.lock();
catch {OverlappingFileLockException e} {}
}
// more code
}

在示例 1 中,将标记 fc.lock() 调用。

在示例 2 中,将标记 super.lock() 调用。

在示例 3 中,将不会标记任何内容,因为 doX() 方法已经抛出 OverlappingFileLockException,并且 doY() 方法捕获了 OverlappingFileLockException

Java SE 6 添加了系统属性 sun.nio.ch.disableSystemWideOverlappingFileLockCheck,以控制 java.nio.channels.FileChannel.lock 文件检查行为。

有关其他信息,请参阅 Java SE 6 Compatibility 指南中的第 4 条。