在我的代码中,我有一个名为 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.
}
}
因此该对象在 onEvent
方法中接收Events
。每次出现新事件时,数据都会记录到文件中。数据记录器应使用 start()
方法启动,并使用 stop()
方法停止。我在这段代码中看到的问题是,如果 DataLogger 的客户端/调用者调用 stop()
,则可能是事件在同一时刻到达,然后将被记录,尽管用户之前曾调用过 stop()
。如果数据流已经关闭,这甚至可能导致崩溃。我想我需要在这里添加一些同步/锁定代码,对吗?扩展代码的最佳方式是什么?
最佳答案
最直接的解决方案是同步 onEvent() 和 stop()。这样,只能同时调用这两个方法之一,从而解决您最初的问题。
public void onEvent(..) {
public void start() {
public void stop() {
变成了
public synchronized void onEvent(..) {
public synchronized void start() {
public synchronized void stop() {
关于java - 基本数据记录器的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26465761/