在学习NIO时候,有一段描述:
文件锁定以整个Java虚拟机来保持。但它们不适用于控制同一虚拟机内多个线程对文件的访问。
这是什么意思?
public class Test01 {
public static void main(String[] args) {
try {
RandomAccessFile fileA = new RandomAccessFile("/Users/mac/tmp/abc", "rw");
FileChannel fileChannelA = fileA.getChannel();
FileLock lock = fileChannelA.lock(0, 1, true);
lock.release();
} catch (Exception e) {
e.printStackTrace();
}
}
}
锁是与文件相关的,而不是Channel。
用于跟外部进程协调,而不是在同一JVM中的线程之间;
所以也就是说, 一个应用运行期间, 如果lock了, 另外再启动一个应用访问同一个文件, 是锁定的;
但是这个锁, 与同一个应用中的多个线程无关;
核心词:
所以其实这句话是讲这个FileLock的用途是隔离一个文件在进程之间的争抢;不是隔离一个文件在进程内多个线程的竞争的!