내 코드에는 DataLogger
이라는 객체가 있습니다. 이름에서 알 수 있듯이 파일에 데이터 로깅을 담당합니다.기본 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()
을 호출 했음에도 불구하고 이벤트가 방금 로깅 될 동일한 순간에 도착할 수 있다는 것입니다. 데이터 스트림이 이미 닫힌 경우에도 충돌이 발생할 수 있습니다. 내가 몇 가지 synchornization을 추가 할 필요가/여기 코드를 잠금이 맞나요? 내 코드를 확장하는 가장 좋은 방법은 무엇입니까?