2

簡単に言うと、バックエンドとして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。

4

3 に答える 3

2

FileLocks は、個々のスレッドではなく、JVM 専用です。そのため、Swing アプリと同じプロセス内でそのコードを実行すると、JVM によって共有されるため、ロックが発生します。

Swing アプリが実行されていない場合は、他のプロセスがロックを競合していないため、問題なくロックを取得できます。

于 2009-02-08T00:25:15.577 に答える