私は非常に簡単な問題を解決しようとしています。フレームを描画するメインスレッドと、毎回このフレームを準備する別のスレッド(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の初心者であり、それを達成するためのはるかに優れた安全な方法があると感じています. それについてアドバイスをいただけますか?ありがとうございました。