此规则会标记是否使用了 java.nio.channels.FileChannel.lock() 方法。在 Java SE 6 中,lock() 方法现在会抛出 java.nio.channels.OverlappingFileLockException。
此规则会标记没有 try/catch 块并且抛出了 OverlappingFileLockException 或者周围的方法未抛出 OverlappingFileLockException 的 lock() 方法。
示例 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 条。