通过多个线程读写文件

时间:2012-05-07 11:51:46

标签: java multithreading file-io

我想通过线程在同一个文件中读写。

但条件是当第一个线程完成读取时,另一个线程应该写入。

我提出的解决方案是:

class XYX {

  public void read(){
    synchronised(fileObj){
      //write the reading logic
    }
  }

  public void write(){
    synchronised(fileObj){
      //write the writing logic 
    }
  }
}

请让我知道您的想法

我想保留此订购

阅读 - 写作 - 阅读 - 写作 - 阅读 - 等等

4 个答案:

答案 0 :(得分:2)

我会在线程之间共享Lock

由于在任何给定时间只有一个线程会保持锁定,因此当读取线程释放锁定时,您将确保写入线程只写入文件(在finally块上!

答案 1 :(得分:0)

绝对使用java.util.concurrent中的内容。我在这里建议两个CountDownLatch es。在调用cdl1.countDowncdl2.await之前,在一个线程中进行写操作;阅读线程正好相反。

答案 2 :(得分:0)

我会使用两个信号量一个用于读取,一个用于写入,它们之间只有一个单元。 read方法等待读取信号量,然后读取,然后发信号写入信号量。编写器等待写信号量,然后写入,然后发信号通知读取信号量。

答案 3 :(得分:0)

如果必须保持read-then-write的总排序,那么最简单的方法是使用监视器:

class XYX {

  private final Object fileObj = new Object();
  private volatile boolean writerWaits = true;

  public void read(){
    // read from file
    synchronized(fileObj){
        writerWaits = false;
        fileObj.notify(); // signal the writer to begin
    }
  }

  public void write(){
    synchronized(fileObj){
        while(writerWaits)
           fileObject.wait(); // wait for signal from reader
    }
    // write to file
  }
}