Я пытаюсь решить довольно легкую проблему. У меня есть основной поток, который рисует кадр и другой поток (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, и я чувствую, что есть намного лучший и безопасный способ его достижения. Не могли бы вы дать мне совет об этом? Спасибо.
@HovercraftFullOfEels вы правы сэром. – Juvanis
@Kael: ваш код кажется мне необычным - но я не эксперт по резьбе. Является ли ваша программа каким-либо образом графическим интерфейсом? Это java.awt.Frame? Если да, почему бы не использовать Swing и javax.swing.JFrames? Если GUI рассмотрит возможность использования SwingWorkers. И если вы не получите достойных ответов в ближайшее время, подумайте о том, чтобы предоставить немного более подробную информацию, если это возможно. –
@Hovercraft Full Of Eels: я думаю, я должен переименовать его. Это просто чистая Java, без дополнительных фреймворков. – Kael