Warum OverlappingFileLockException passieren, wenn beim sperren eine Datei?

Ich versuche, eine Datei sperren und schreiben Sie es mit den folgenden code:

public class TrainSetBuildTask implements Runnable {
    private String pathname;
    public TrainSetBuildTask(String pathname){
        this.pathname = pathname;
    }

    @Override
    public void run() {
          try {
              String content = "content\n";
             //write to a file
             FileOutputStream os = new FileOutputStream(new File(pathname), true);
             FileChannel channel = os.getChannel();
             FileLock lock = channel.tryLock();
             if (lock != null) {
                ByteBuffer bytes = ByteBuffer.wrap(content.getBytes()); 
                channel.write(bytes);
                lock.release();
             }
             channel.close();
             os.close();
          } catch (IOException e) {
              e.printStackTrace();
          }
     }
 }

Und neuen zwei thread mit Instanzen der Klasse:

    String pathname = "/home/sjtu123/test.arff";
    TrainSetBuildTask task1 = new TrainSetBuildTask(pathname);
    Thread t1 = new Thread(task1);
    TrainSetBuildTask task2 = new TrainSetBuildTask(pathname);
    Thread t2 = new Thread(task2);
    t1.start();
    t2.start();

Dann bekomme ich die Fehlermeldung OverlappingFileLockException. Ich Frage mich, warum dies geschieht, da ich nur die Datei sperren, wenn in jedem thread? Wie kann fix meinen code?

InformationsquelleAutor jerry_sjtu | 2012-03-28
Schreibe einen Kommentar