가능한 중복 :
Java SynchronizationJava에서 synchronized()/wait()/notifyAll()은 무엇을합니까?
내가 안드로이드 게임부터 책 을 읽고 있어요.
많은 부분이 synchronized()
이지만 실제로 어떤 역할을하는지 이해하지 못합니다. 오랫동안 자바를 사용하지 못했고 멀티 스레딩을 사용해 본지 확실하지 않습니다.
캔버스 예제에서는 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();
}
(진실하게)이 질문을하기 전에 어디에서든지 검색 했습니까? 심지어 검색 스택 오버플로? –
그래, 나 ... @ Joachim Sauver 그 질문 do not 대기 커버()/notify() –
당신은 방금 wait()/notify()를 추가했다. 그것을 구축 라이브. –