如何在线程内停止并重新启动循环?

时间:2014-02-28 06:00:40

标签: java multithreading swing

我正在使用Swing处理Java。我正在制作绘图应用程序。只要布尔变量设置为true,它就会有一个不断运行的常量更新循环。循环位于线程内。

它工作正常,但现在我希望循环只在特定时间运行(仅在按下鼠标时),否则不运行。 (因此没有浪费记忆)。

要停止循环,我可以简单地将该变量设置为false,因此while循环将退出。但我的问题是,如何在停止后重启循环?将该变量设置回true将不会重新启动循环,因为该程序已经在该循环之外(我是否正确?)。如果是这样,那么这样做的好方法是什么?

我的循环:

public void run(){

    int TICKS_PER_SECOND = 50;
    int SKIP_TICKS = 1000 / TICKS_PER_SECOND;
    int MAX_FRAMESKIP = 10;

    long next_game_tick = System.currentTimeMillis();
    int loops;

    boolean app_is_running = true;

    while( app_is_running ) {

        loops = 0;
        while( System.currentTimeMillis() > next_game_tick && loops < MAX_FRAMESKIP) {

            update();
            catch (AWTException e) { e.printStackTrace(); }

            next_game_tick += SKIP_TICKS;
            loops++;
        }

        repaint();
    }

}

3 个答案:

答案 0 :(得分:2)

将循环移动到它自己的方法。然后当你需要停止时,你可以从方法返回。如果你想再回来再次调用该方法。

答案 1 :(得分:0)

如果需要,你可以让鼠标点击处理程序产生线程吗?使用变量来跟踪线程何时运行,因此它知道不重新生成。完成后,只需退出线程即可。这应该在不需要任务时最小化资源。

答案 2 :(得分:-1)

使用递归。在内部调用循环。或者在内部调用方法。

或者您可以将其编码为方法,以便您可以根据需要调用该循环。