synchronized()/wait()/notifyAll() 在 Java 中做什么?
2022-09-01 10:07:04
可能的重复:
Java 同步
我正在读《开始Android Games》这本书。
它使用了很多,但我真的不明白它做了什么。我已经很久没有使用Java了,我不确定我是否曾经使用过多线程。synchronized()
在 Canvas 示例中,它使用 .但是,在 OpenGL ES 示例中,它创建了一个名为 的对象,然后使用 。当游戏状态更改时,它会调用,然后synchronized(this)
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();
}