아주 쉬운 문제를 해결하려고합니다. 프레임을 그리는 메인 스레드와 매번이 프레임을 준비하는 다른 스레드 (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 백그라운드에서 실행하고 직후 중지 프레임이 준비되었습니다. 나는 자바에서 매우 초보자이며, 나는 그것을 성취 할 수있는 훨씬 더 안전하고 안전한 방법이 있다고 생각한다. 그것에 대해 조언 해 주시겠습니까? 고맙습니다.
@HovercraftFullOfEels 당신이 옳습니다. – Juvanis
@Kael : 코드가 이상하게 보입니다.하지만 스레딩 전문가는 아닙니다. 귀하의 프로그램이 어떤 방식 으로든 GUI입니까? 이것은 java.awt.Frame입니까? 그렇다면 왜 Swing과 javax.swing.JFrames를 사용하지 않습니까? GUI가 SwingWorkers 사용을 고려한다면. 그리고 곧 괜찮은 답변을 얻지 못하면 가능한 한 좀 더 자세한 정보를 제공하는 것을 고려하십시오. –
@ Hovercraft Eels의 가득 차있다 : 나는 그것을 개명해야한다고 생각한다. 이것은 추가 프레임 워크가없는 단순한 Java입니다. – Kael