我需要停止线程吗?

时间:2018-05-07 13:04:52

标签: java multithreading

我正在尝试在我的项目中实现单独的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());
            }
        }
    }

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

只要线程没有机会进行无限循环 比如使用while循环。完成Runnable中的所有任务后,线程将停止。

答案 2 :(得分:1)

不,您不需要手动停止线程。不仅如此, <?php class Admin_model extends CI_Model { public function __construct() { // parent::__construct(); $this->load->database(); } public function update($data){ $return=$this->db->update('pp_admin', $data); return $return; } public function authenticate_admin($user_name, $password) { $this->db->select('*'); $this->db->from('pp_admin'); $this->db->where('admin_username', $user_name); $this->db->where('admin_password', $password); $Q = $this->db->get(); if ($Q->num_rows > 0) { $return = $Q->row(); } else { $return = 0; } $Q->free_result(); return $return; } 线程的方法是stop()并且不安全:

  

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

@deprecated将在Thread阻止转义时完成其工作。不仅如此,你需要付出一些努力来保持它的运行。

您需要开始研究run框架,而不是直接操作Executors

答案 3 :(得分:1)

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

  

新,   Runnable接口,   等候,   定时等待,   终止,

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

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

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