繁体   English   中英

我需要停止线程吗?

[英]Do I need to stop a Thread?

我正在尝试在我的项目中实现一个单独的Thread 每隔一小时,调度程序就会启动一个线程来从服务器获取文件并将它们存储在我的数据库中。

我的代码可以正常工作。 由于调度程序每小时启动一个新Thread ,我不知道是否需要手动停止Thread

 try {
        Runnable task = new MyClass();
        Thread thread = new Thread(task);
        thread.start();

 } catch (Exception ex) {
        System.err.println("Exception-Thread: " + ex.getMessage());
 }

我的班级(可运行)

  public class MyClass implements Runnable {
        @Override
        public void run() {

            try {
                //Do stuff...
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
            }
        }
    }

如果在Runnable没有永久循环或类似的东西,那么你不需要。

只要线程没有机会做无限循环就像使用while循环一样。 一旦Runnable中的所有任务完成,线程将停止。

不,您不需要手动停止线程。 不仅如此,线程的stop()方法是@deprecated而且不安全:

这种方法本质上是不安全的。 使用Thread.stop停止线程会导致它解锁已锁定的所有监视器

Thread逃脱run块时, Thread将完成其工作。 不仅如此,你需要做一些努力来保持它的运行。

您需要开始查看Executors框架而不是直接操作Threads

线程生命周期具有以下状态

新的,可运行的,等待的,定时的等待,终止,

首先你不应该直接停止你的线程,因为它可能导致共享变量处于不一致状态,如果你想,那么你必须做一个正确的流程来终止线程。

要使您的线程处于终止状态,您必须查看它是否处于等待状态,定时等待或处于活动状态的更糟糕情况取决于您如何处理它。

如果你没有做任何这个,那么不用另外请做一个正确的方法来终止线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM