Lucky丶钉钉 2019-08-13 20:54 采纳率: 71.4%
浏览 1616
已采纳

Java多线程中Timer定时器执行完任务为什么不停止?

Java多线程中Timer定时器执行完任务为什么不停止?

    public Timer(String name) {
        thread.setName(name);
        thread.start();
    }

这是Timer类中调用的构造方法,那我自己写一个简单的线程程序时,run方法运行结束就停止了,为什么这个定时器中的方法运行完以后却不停止呢?

public class MyThread extends Thread {
    @Override
    public void run() {
        super.run();
        System.out.println("MyThread");
    }
}
public class MyThreadTest {
    public static void main(String[] args) {
        MyThread mt = new MyThread();
        mt.start();
        System.out.println("运行结束");
    }
}

图片说明

public class MyTask extends TimerTask{
    @Override
    public void run() {
        System.out.println("任务执行了,时间为:"+new Date());
    }
}
public class Test1 {
    public static void main(String[] args) {
        System.out.println("当前时间为:"+new Date());
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.SECOND,calendar.get(Calendar.SECOND)-10);
        Date runDate = calendar.getTime();
        System.out.println("计划时间为:"+runDate);
        MyTask task = new MyTask();
        Timer timer = new Timer();
        timer.schedule(task,runDate);
    }
}

图片说明
谢谢指点一下是什么原因?

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2019-08-14 09:07
    关注

    定时器内部是开启了一个线程去执行任务的,虽然任务执行完成了,但是该线程并没有销毁。
    这和自己定义一个线程执行完成 run 方法后就自动销毁是不一样的,Timer 本质上是相当于线程池,它缓存了一个工作线程,一旦任务执行完成,该工作线程就处于空闲状态,等待下一轮任务。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何使用chatgpt完成文本分类任务?
  • ¥15 已知速度v关于位置s的等式,怎么转化为已知位置求速度v的等式
  • ¥15 我有个餐饮系统,用wampserver把环境配置好了,但是后端的网页却进去,是为什么,能不能帮远程一下?
  • ¥15 R运行没有名称为"species"的插槽对于此对象类"SDMmodelCV"
  • ¥20 基于决策树的数字信号处理,2ask 2psk 2fsk的代码,检查下报错的原因
  • ¥20 python作业求过程
  • ¥15 wincc已组态的变量过多
  • ¥60 如图:直线与椭圆X轴平行,求直线与椭圆任意一点的相切坐标计算公式
  • ¥50 如何用python使用opencv里的cv::cudacodec::VideoWriter函数对视频进行GPU硬编码
  • ¥100 c#solidworks 二次开发 工程图自动标边线法兰 等折弯尺寸怎么标