当前位置: 首页 > 知识库问答 >
问题:

如何从内部停止线程?[副本]

石喜
2023-03-14

考虑以下代码:-

class A {
    Thread t = new Thread() {
        @Override
        public void run() {
            super.run();
            
            // Tons of statements.... (Set 1)
            
            
            if(/* We don't meet certain requirements for continuing */) {
                
                // Exit and stop the thread and do not execute any following statements after the if block
                
            }
            
            
            // Tons of statements.... (Set 2)
        }
    };
    
    public void run() {
        t.start();
    }
}

class B {
    public static void main(String[] args) {
        A obj = new A();
        obj.run();
    }
}

我们用B类的main开始程序。

并且stop()被折旧。那么,实现必要的if块的正确方法是什么。如果某些critera在continti之前没有满足,我们就进入if块,然后代码结束胎面,而不执行任何进一步的指令(在if块下面),然后线程立即死亡。

现在,一个简单而正确的解决方案就是将所有的SET2指令放在else块中,

但我想知道是否有其他合适的方法来做到这一点。

它也会帮助我更好地理解线程。启动线程很容易,但停止它们总是会给我的大脑带来沉重的负担。

共有1个答案

慎志国
2023-03-14

线程在其run方法完成时终止。return语句终止一个方法。因为方法run不返回值,所以在if块中写入return将终止方法,随后终止线程。

if(/* We don't meet certain requirements for continuing */) {
    return;
}
 类似资料:
  • 通过运行https://github.com/firebase/firebase-admin-java/blob/master/src/test/java/com/google/firebase/database/integration/shutdownexample.java的示例代码 调用后,仍有一些线程在运行: 参考处理程序终结器信号调度器FirebaseDatabaseWorker池-5-

  • 问题内容: 对于连接到服务器的每个客户端,我都会生成一个新线程,如下所示: 现在,我知道可以使用以下代码关闭 所有 线程: 但是,如何从关闭线程 内 该线程? 问题答案: 启动线程时,它开始执行您提供的功能(如果要扩展,该功能将为)。要结束线程,只需从该函数返回即可。 根据这个,你也可以打电话,这将抛出一个异常,将安静地结束线程。

  • 我通过创建固定数量的线程来使用执行器服务来进行HTTP GET数据检索。 当Tomcat停止时,我们会出现以下错误: 严重:web应用程序[/viewer]似乎已启动名为[ThreadExecutor_51616156]的线程,但未能停止该线程。这很可能会造成内存泄漏。 这是真的吗?在没有这些服务错误的情况下,如何正确停止tomcat。

  • 问题内容: 我已经用GUI制作了一个Java程序,并且想要一个停止按钮功能,其中当用户单击停止按钮时,必须停止该程序。 在我的程序中,主线程启动其他10个线程,我希望每当单击“停止”按钮时,所有10个线程都必须在主线程之前停止。 其次,我还希望每当停止这10个线程中的任何一个线程时,它都必须先关闭它打开的所有资源,然后再连接数据库等。 我已经实现了.......回答的代码。 现在有一个问题。 我的

  • 对不起,老问题。我已经澄清了。我如何用我可怜的线程类开始停止线程? 编辑:它在循环中,我想在代码开头再次重新启动它。我如何启动停止重新启动? 我的班级: 在主代码中,我希望:

  • 代码非常简单,我搜索了一下,发现我只会用到 这似乎不起作用,我也尝试过使用平台参数,比如 下面是您可以运行的测试应用程序: 锁定得可拥有同步器:-无 更新:我正在Linux Fedora 16 64bit上使用最新的Oracle JDK 7u17 64bit。

  • 我试图创建一个简单的pythongui(使用Tkinter),其中包含start按钮,在线程中运行while循环,以及停止while循环的stop按钮。 我对停止按钮有问题,它不会停止任何东西,一旦单击开始按钮,就会冻结GUI。 见下面的代码: 知道怎么解决这个问题吗?我肯定这是微不足道的,一定做了成千上万次,但我自己找不到解决办法。 谢谢大卫

  • 我有一个简单的控制台应用程序,有时需要执行图形操作,对于那些我使用JavaFx框架(有一些功能,我需要像css样式的文本)我只是生成一些形状和文本到一个隐藏的场景,然后保存在文件中仅此而已, 我知道要使用JavaFx,我必须将图形操作传递给JavaFx线程,但是当一切都完成后,我必须关闭应用程序(几个小时后),这个JavaFx线程仍然保持打开...我真的不想强行退出System.exit(),因为