当相应的Stream关闭或我是否必须明确关闭它们时,Java FileChannel锁是否关闭?

Jac*_*vis 4 java file-io scala locking

例如,我的代码目前看起来类似于以下内容.我需要明确调用lock.release还是在FileOutputStream关闭时自动释放?

var os:FileOutputStream = null
var writer:PrintWriter = null
try {
  os = new FileOutputStream(name, false)
  val lock = os.getChannel().tryLock
  if(lock != null) {
    writer = new PrintWriter(new BufferedWriter(new
      OutputStreamWriter(os)))
    (write stuff to file)
  } else {
    (error stuff)
  }
} finally {
  if(writer != null) writer.close
  os.close
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 5

根据FileLock的javadoc :

"文件锁定对象最初是有效的.它通过调用释放方法释放锁定,通过关闭用于获取它的通道,或者通过Java虚拟机的终止(以先到者为准)来保持有效."

...我假设关闭流关闭了底层渠道.