Я пытаюсь решить довольно простую проблему.У меня есть основной поток, который рисует кадр, и другой поток (FrameThread), который каждый раз подготавливает этот кадр.Оба потока должны использовать один и тот же объект MyFrame.Я хочу управлять FrameThread из основного потока, то есть: MyFrame готов -> нарисовать его в основном потоке -> оставить FrameThread работающим.В настоящее время я сделал следующее:
private class FrameEngine
{
private boolean isFrameReady = false;
private MyFrame frame;
public synchronized void generateFrame()
{
while(isFrameReady)
wait();
frame = FrameGenerator.nextFrame();
isFrameReady = true;
notifyAll();
}
public synchronized MyFrame getFrame()
{
while(!isFrameReady)
wait();
isFrameReady = false;
notifyAll();
return frame;
}
}
После этого я создаю FrameThread:
private class FrameThread implements Runnable
{
private final FrameEngine frame_eng;
public FrameThread( FrameEngine engine )
{
frame_eng = engine;
}
@Override
public void run()
{
while(true)
frame_eng.generateFrame();
}
}
И, наконец, основной поток:
FrameEngine frame_engine = new FrameEngine();
Thread frameThread = new Thread( new FrameThread( frame_engine ) );
frameThread.start();
...
while(true)
{
...
drawFrame( frame_engine.getFrame() );
...
}
Итак, моя цель: FrameThread выполняетсяв фоновом режиме и останавливается сразу после того, как кадр готов.Я очень новичок в Java, и я чувствую, что есть гораздо лучший и безопасный способ достичь этого.Не могли бы вы дать мне совет по этому поводу?Спасибо.