thể trùng lặp:
Java SynchronizationĐồng bộ hóa()/wait()/notifyAll() làm gì trong Java?
Tôi đang đọc cuốn sách Beginning Android Games.
Nó sử dụng synchronized()
rất nhiều nhưng tôi thực sự không hiểu nó làm gì. Tôi đã không sử dụng Java trong một thời gian dài và tôi không chắc chắn nếu tôi đã từng sử dụng đa luồng.
Trong ví dụ Canvas, nó sử dụng synchronized(this)
. Tuy nhiên trong ví dụ OpenGL ES, nó tạo ra một đối tượng được gọi là stateChanged
và sau đó sử dụng synchronized(stateChanged)
. Khi trạng thái trò chơi thay đổi nó gọi stateChanged.wait()
và sau đó stateChanged.notifyAll();
Một số mã:
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();
}
(Nghiêm túc) bạn có tìm kiếm gì ở bất cứ nơi nào trước khi hỏi điều này không? Thậm chí tìm kiếm Stack Overflow? –
Vâng, tôi đã làm ... @Joachim Sauver câu hỏi không bao gồm chờ đợi()/thông báo() –
Bạn chỉ cần thêm wait()/notify() - bạn nên cố gắng tạo câu hỏi đúng lần đầu tiên thay vì xây dựng nó trực tiếp. –