java - FileChannel 和 RandomAccessFile 似乎不起作用

标签 java file-io locking nio

简单来说:一个使用 sqlitejdbc 作为后端的 swing 应用程序。目前,启动使用同一数据库文件的多个实例没有问题。应该有。 该文件已锁定(应用程序运行时无法删除它),因此检查应该很简单。结果不是。

    File f = new File("/path/to/file/db.sqlite");
    FileChannel channel = new RandomAccessFile(f, "rw").getChannel();
    System.out.println(channel.isOpen());
    System.out.println(channel.tryLock());

结果

    true
    sun.nio.ch.FileLockImpl[0:9223372036854775807 exclusive valid]

无论应用程序是否正在运行。我是不是没捕获重点? TIA。

最佳答案

文件锁是 JVM 独有的,而不是单个线程。因此,如果您在 Swing 应用程序所在的同一进程中运行该代码,您将获得锁,因为它是由 JVM 共享的。

如果您的 Swing 应用程序未运行,则没有其他进程争用该锁,因此您可以很好地获得它。

关于java - FileChannel 和 RandomAccessFile 似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/524804/

相关文章:

java - Android: Import DrawerLayout 无法解析

java - Java 中的 RFC 822 电子邮件地址验证

android - 从 AndroidTestProject 加载文本文件

c# - 将复杂文件读入组合框

multithreading - LOCK 前缀与 MESI 协议(protocol)?

java - 从 Sonarqube 规则中排除 com.sun.jersey 包

java - 配置 Intellij 以使用 guest VM 的 Jvm,这可能吗?

c - 尝试将文件中的某些值读入 C 中的数组

c++ - 数据容器C++设计

c - linux 内核中自旋锁并发导致的内核崩溃