实现基本的DataLogger

时间:2014-10-20 12:29:23

标签: java synchronization

在我的代码中,我有一个名为DataLogger的对象。顾名思义,它负责将数据记录到文件中。

该类的骨架如下所示:

class DataLogger {

   private BufferedWriter mFileWriter = ...
   private boolean mRunning = false;

   //constructor
   public DataLogger() {
   //init stuff
   }

   public void onEvent(..) {
   //...
   if(mRunning) {
      mFileWriter.write(...);
   }
   /...
   }

   public void start() {
   //startdata logging
   mRunning = true;
   }

   public void stop() {
   //stop data logging
   mRunning = false;
   //closing File writer etc.
   }
}

因此,对象在Events方法中收到onEvent。每次有新事件进入时,数据都会记录到文件中。应使用start()方法启动数据记录器,并使用stop()方法停止。我在这段代码中看到的问题是,如果DataLogger的客户端/调用者调用stop(),则可能是事件刚刚到达的同一时刻将被记录,尽管用户已调用{ {1}}之前。如果数据流已经关闭,这甚至可能导致崩溃。我想我需要在这里添加一些同步/锁定代码这是对的吗?扩展代码的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

最直接的解决方案是同步onEvent()和stop()。这样,可以同时调用两种方法中的一种,解决您的初始问题。

public void onEvent(..) {
public void start() {
public void stop() {

变为

public synchronized void onEvent(..) {
public synchronized void start() {
public synchronized void stop() {