可能是重复问题:
Java同步
我正在阅读《Beginning Android Games》一书。
它经常使用 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();
}