java线程通信,独立文件读写

时间:2014-12-15 07:03:31

标签: java file thread-safety timertask thread-synchronization

Java的。我有两个主题。一个将持续监视某些事件,并根据事件,它将更新(添加或删除)一个文件。另一个作为计时器任务事件的线程将定期更新同一个文件。 我希望线程在另一个线程没有访问文件时更新文件。我无法使用锁,因为文件更新代码部分对于每个线程和不同的java类是独立的。我怎么能这样做?提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用同步。

public synchronized void update() {
..
..
..
}

所以只有一个线程访问该方法。其他人会等待锁定。

如果您有添加,更新,删除方法 然后,

private static Object LOCK = new Object(); 

public void update() {
  synchronized(LOCK) {
    ..
    ..
    ..
    }
}

public void add() {
  synchronized(LOCK) {
    ..
    ..
    ..
    }
}

public void delete() {
  synchronized(LOCK) {
    ..
    ..
    ..
    }
}

所以只有一个线程能够编辑/删除/添加文件。

如果一个线程正在添加,第二个线程正在尝试删除,那么它将等待第一个线程添加。

答案 1 :(得分:0)

synchronized  void updateFILE
{
       //Your operation here
}

因此,一个线程可以执行操作..您可以查看here

答案 2 :(得分:0)

也许你可以:

  1. 围绕不安全的文件更新程序类创建一个包装类。
  2. 通过添加明确定义关键部分的同步或锁定来适当地处理所有异常(例如,解锁finally块中的关键部分),使该包装类具有线程安全性。
  3. 让其他线程改为调用您的包装类。