我想通过线程在同一个文件中读写。
但条件是当第一个线程完成读取时,另一个线程应该写入。
我提出的解决方案是:
class XYX {
public void read(){
synchronised(fileObj){
//write the reading logic
}
}
public void write(){
synchronised(fileObj){
//write the writing logic
}
}
}
请让我知道您的想法
我想保留此订购
阅读 - 写作 - 阅读 - 写作 - 阅读 - 等等
答案 0 :(得分:2)
我会在线程之间共享Lock。
由于在任何给定时间只有一个线程会保持锁定,因此当读取线程释放锁定时,您将确保写入线程只写入文件(在finally块上!)
答案 1 :(得分:0)
绝对使用java.util.concurrent
中的内容。我在这里建议两个CountDownLatch
es。在调用cdl1.countDown
和cdl2.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
}
}