首页 > 解决方案 > Java - 使用线程启动 - 暂停 - 停止微型编程世界

问题描述

我仍然难以正确使用线程。我知道如何开始一个的基本要点,但我遇到的最大问题是暂停 - 一起恢复和停止它们。每当我尝试停止运行可能包含循环的主方法的模拟线程时,我需要能够在我的 GUI 中使用按钮暂停该线程。暂停和停止线程总是会导致整个 GUI 冻结,因此不可能。

我将我的 Gui 控制器连接到 Simulation Manager 类,该类基于给定的 class1 和 class2 创建一个新的模拟。该管理器应跟踪当前状态并使用模拟类中的线程(扩展线程)。

public void startProg() {
        if(simulation == null){
            simulation = new Simulation (class1, class2, this);
        }
        if(state.getState () == SimulationsStatus.PAUSE){
            simulation.resumeProg ();  -- Basically where i call the Simulation object to resume / start
            System.out.println ("startProg-resume" );

     ...
        }

我的模拟是这样开始的:

   public synchronized void startSimulation() {
       s = new Simulation (class1,class2,simulationManager); --- Wether i assign my Simulation s to a 
--- new one or the current object this is in does not change the outcome 
       s.start ( );
    }

在那个类中,我有 4 个方法,启动、恢复、暂停和停止,它们应该对线程本身做命名的事情。我不知道如何让当前线程停止而不冻结程序本身。

这是该线程对象的 run 方法,如果用户在我的 gui 中以这种方式设计其代码,则 main 方法可以包含无限循环,因此 pause 和 stop 方法应该能够暂停和停止线程,即使它当前正在计算某些东西

    @Override
    public synchronized void run() {
            try {
                class1.main ( );
            } catch (Exception e) {
                System.out.println (e.getStackTrace ( ));
        }
    }

任何提示都非常感谢

目前我正在使用观察者模式在设定的时间内“冻结”线程,以便 class1 在屏幕上以固定速度移动

标签: javamultithreading

解决方案


JVM不支持停止线程和暂停/恢复线程,但不支持其中运行的代码。

例如,参见Thread.stop 上的文档

如果您想运行您不知道或不信任的代码并希望对其进行控制,请在其自己的 VM 中运行它,最好是在虚拟机环境中。这样你就可以控制虚拟机了。


推荐阅读