Robię aplikację Stoper na Androida 4.1.2.
W klasie Timer mam metodę stop(), która podpięta jest do button'a STOP znajdującego się na ekranie i
wykonywana default'owo w wątku głównym po wciśnięciu button'a STOP:
public void stop() {
if (this.timerState == State.RUNNING){
this.stopClockValue = (long) SystemClock.elapsedRealtime();
this.timerState = State.STOP;
}
}
W tej samej klasie mam też metodę calculateIntervalClockValue() wykonywaną co 9ms w osobnym wątku, który sobie stworzyłem:
private void calculateIntervalClockValue() {
State state = this.timerState;
switch(state){
case RESET:
this.intervalClockValue = 0;
break;
case RUNNING:
this.intervalClockValue = ((long) SystemClock.elapsedRealtime()) - this.startClockValue;
break;
case STOP:
this.intervalClockValue = this.stopClockValue - this.startClockValue;
break;
}
}
Czy może się zdarzyć, że metoda stop() zostanie odpalona podczas wykonywania metody calculateIntervalClockValue(). Działają one na tych samych polach klasy, więc mogą z tego wyniknąć jakieś niespodziewane sytuacje. Jak się przed tym uchronić?