Myślałem, że mniejwięcej rozumiem zagadnienie synchronizacji wątków, do póki nie zobaczyłem przykładu LunarLander z dokumentacji:
LunarView.java | Android Developers
Nie rozumiem następujących rzeczy:
1. Dlaczego jako mutex jest używany obiekt SurfaceHolder?
Przecież można było w tym celu użyć dowolnego obiektu, np. Object mutex; i nie wprowadzać zbędnego zamieszania.
2. Jaki sens ma ten zapis:
public synchronized void restoreState(Bundle savedState) {
synchronized (mSurfaceHolder) {
//TREŚĆ FUNKCJI
}
}
Z tego co wiem funkcje zsynchronizowane nie mogą być wykonywane przez różne wątki w tym samym czasie, a przecież w tym miejscu i tak do tego nie dojdzie, bo cała treść funkcji jest objęta blokiem synchronized(){}.
3. Czy taki sposób synchronizacji jest konieczny?
W podanym przykładzie treść WSZYSTKICH funkcji wątku LunarThread jest objęta blokiem synchronizacji, co ma pewnie fatalny wpływ na wydajność.
Z góry dziękuję za pomoc!