RandomAccessFileを使用して、ファイルをアクセスすると「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」のメッセージが出力されるときがある。 以下は例です。
DataInputStream index = null; RandomAccessFile data = null; long seek = 0; int row = 0; try { index = new DataInputStream(new FileInputStream(new File("index.db"))); data = new RandomAccessFile("data.db", "rw"); byte[] buffer = new byte[32]; while (true) { ++row; seek = index.readLong(); data.seek(seek); data.read(buffer); } } catch (EOFException e) { } catch (IOException e) { System.err.println(String.format("[%d]: seek=%d -- エラーの発生したレコード番号.", row, seek)); e.printStackTrace(); } finally { if (index != null) { index.close(); } if (data != null) { data.close(); } }エラーが発生するレコード位置(row)は、まちまちで実行する度に変化する。 1000件目であったり、157件目であったり。。。 index.dbは約100万件あります。 (a).正常に動作する環境 OS: Windows XP、Windows 7 CPU: Core 2 Duo、CORE i5 (b).エラーが発生する環境 OS: Windows server 2008 R2 standees sp1 CPU: Intel(r) Xeon(r) CPU X5690@3.46GHz (2プロセッサ) どういった原因が考えられますか? 因みに、RandomAccessFileのモードを"r"にすると正常に動作しました。 モードで排他ロックするのでしょうか? RandomAccessFile#getChannel().lock()は使用していません。 (a)の方は最大4コアで、(b)の方は24コアあります。 (b)の方が早すぎてリードにブロックされているとかありますか? ただモードを変更しただけで正常に動作するのも理解できません。 よろしくお願いいたします。