Я пытаюсь решить довольно простую задачу. У меня есть основной поток, который рисует кадр, и другой поток (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, и я чувствую, что есть гораздо лучший и безопасный способ добиться этого. Не могли бы вы дать мне совет по этому поводу? Спасибо.