简单来说:一个使用 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/