Возможный дубликат:
Синхронизация Java
Я читаю книгу "Начало игр для Android".
Он много использует synchronized()
, но я действительно не понимаю, что он делает. Я не использовал Java в течение длительного времени, и я не уверен, что когда-либо использовал многопоточность.
В примерах Canvas используется synchronized(this)
. Однако в примере OpenGL ES он создает объект с именем stateChanged
, а затем использует synchronized(stateChanged)
. Когда изменяется состояние игры, он вызывает stateChanged.wait()
, а затем stateChanged.notifyAll();
Некоторые коды:
Object stateChanged = new Object();
//The onPause() looks like this:
public void onPause()
{
synchronized(stateChanged)
{
if(isFinishing())
state = GLGameState.Finished;
else
state = GLGameState.Paused;
while(true)
{
try
{
stateChanged.wait();
break;
} catch(InterruptedException e)
{
}
}
}
}
//The onDrawSurface looks like this:
public void onDrawFrame(GL10 gl)
{
GLGameState state = null;
synchronized(stateChanged)
{
state = this.state;
}
if(state == GLGameState.Running)
{
}
if(state == GLGameState.Paused)
{
synchronized(stateChanged)
{
this.state = GLGameState.Idle;
stateChanged.notifyAll();
}
}
if(state == GLGameState.Finished)
{
synchronized(stateChanged)
{
this.state = GLGameState.Idle;
stateChanged.notifyAll();
}
}
}
//the onResume() looks like this:
synchronized(stateChanged)
{
state = GLGameState.Running;
startTime = System.nanoTime();
}