我正在制作基本的Android游戏,我有一个显示游戏世界的片段。当我打开那个片段时,我创建了一个新的线程,等待我的NetworkThread
从服务器获取世界。另外,我的GetWorldThread
是static
Thread
我只在片段内初始化。
这就是我的GetWorldThread的样子:
synchronized (this)
{
try
{
Log.d("getWorldThread", "waiting()");
wait();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
我的NetworkThread
看起来像这样
if (buffer instanceof World)
{
synchronized (WorldFragment.getWorldThread)
{
World.setWorld(((World) buffer));
Log.d("NetworkThread", "notifying World");
WorldFragment.getWorldThread.notify();
}
}
我的代码有效,但我想知道是否有办法让这更优雅?
答案 0 :(得分:1)
如documentation中所述,您始终应在wait()
循环中使用while
。因此,您的代码可能无法正常工作。
更优雅的方式是使用更高级别的抽象。例如Future和标准FutureTask
。这种方式允许你不要编写像循环这样的低级东西,以避免错误。
更新:另请注意,有Condition
个/ Lock
用于wait
/ synchronyzed
替换,如here所述。事实上,2017年使用wait()
已经过时了