body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

█ 定时器是一个应用十分广泛的线程工具
█ 可用于调度多个定时任务以后台线程的方式来执行。在Java中,可以通过Timer和TimerTask来实现定义调度功能。
Timer 定时器
public Timer()
TimerTask(抽象类)
public boolean cancel()
public abstract void run()
TimerDemo.java
导包什么的略去
public class TimerDemo {
        //定时炸弹,计时3S后爆炸
        public static void main(String[] args) {
                Timer timer=new Timer();
                //Date date=new Date(); //当前时间
                //System.out.println(date);
                //timer.schedule(new MyTask(), 3000);
                //timer.schedule(new MyTask(), 3000,1000);  //delay指延迟多少时间,以毫秒为单位。
                //timer.schedule(new MyTask(), 3000, 1000);
               //timer.cancel(); //终止此计时器,丢弃所有当前已安排的任务。
                Date date;
                DateFormat dFormat=DateFormat.getInstance();  //获取为日期和时间使用 SHORT 风格的默认日期/时间格式器
                try {
                        date=dFormat.parse("Fri Mar 10 18:26:39 CST 2017");  //这里不对,出问题
//这里可以看看练习tese5.java
                        System.out.println("TimerDemo.main()"+date.toLocaleString());
                        timer.schedule(new MyTask(), date);
                } catch (ParseException e) {
                        // TODO 自动生成的 catch 块
                        e.printStackTrace();
                }
        }
}
class MyTask extends TimerTask{
        public void run() {
                System.out.println("MyTask.run() 炸弹爆炸了");
        }       
}
/**
*      void schedule(TimerTask task, Date time);
        安排在指定的时间执行指定的任务。

        void schedule(TimerTask task, Date firstTime, long period);
        安排指定的任务在指定的时间开始进行重复的固定延迟执行。

        void schedule(TimerTask task, long delay);
        安排在指定延迟后执行指定的任务。

        void schedule(TimerTask task, long delay, long period);
        安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

        void scheduleAtFixedRate(TimerTask task, Date firstTime, long period);
        安排指定的任务在指定的时间开始进行重复的固定速率执行。

        void scheduleAtFixedRate(TimerTask task, long delay, long period);
        安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
*      
**/

//System.out.println(date);
//timer.schedule(new MyTask(), 3000);

Timer:

一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。

与每个 Timer
对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。

Timer 对象最后的引用完成后,并且
所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。默认情况下,任务执行线程并不作为守护线程
来运行,所以它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的 cancel 方法。

如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。

Java——线程定时器的更多相关文章

  1. Java线程池应用

    Executors工具类用于创建Java线程池和定时器. newFixedThreadPool:创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程.在任意点,在大多数 nThread ...

  2. Java进阶(十八)Java实现定时器(Timer)

    Java实现定时器(Timer) 绪 在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等.对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类.java.u ...

  3. java线程(5)——线程池(上)

    引入: 在之前的例子中,我们需要使用线程时就直接去创建一个线程,这样既不浪费资源又十分方便.但如果我们需要创建多个并发的线程,而且短时间执行就结束了,如果还用之前的方式,就会大大降低效率和性能了. 因 ...

  4. JAVA Timer定时器使用方法

    JAVA  Timer 定时器测试 MyTask.java:package com.timer; import java.text.SimpleDateFormat;import java.util. ...

  5. Java线程和多线程(一)——线程的基本概念

    Java 线程是一个轻量级执行任务的处理单元.Java提供了Thread类来支持多线程,开发者在应用中可以创建多个线程来支持并发执行任务. 在应用中存在两种类型的线程,用户线程和守护线程.当我们启动应 ...

  6. 为什么JAVA线程中没有Running状态?

    面试官问:为什么 Java 线程没有 Running 状态?我懵了 —— 转  芋道源码 什么是 RUNNABLE? 与传统的ready状态的区别 与传统的running状态的区别 当I/O阻塞时 如 ...

  7. 为什么 Java 线程没有 Running 状态?

    Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事.具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么 ...

  8. Java线程核心基础(上)

    Java线程核心基础(上) 一.实现多线程 根据Oracle官方文档,目前推荐的创建线程方法主要有两种,分别是继承Thread类和实现Runnable接口.通过阅读Thread类源码,可以发现二者不同 ...

  9. Java中定时器Timer致命缺点(附学习方法)

    简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...

随机推荐

  1. linux下使用docker-thunder-xware进行离线下载

    1.环境: lsb_release -a hello@jhello:~$ lsb_release -aNo LSB modules are available.Distributor ID: Ubun ...

  2. ExtJS使用入门

    extjs是基于 yui 由 jack slocum开发, sencha是他们的公司, sencha是由三个项目合并起来的开源项目: ExtJS, jqTouch, Raphael(拉斐尔, 圣经中的 ...

  3. fastjson 简单使用 及其JSONObject使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser. ...

  4. json字符窜转对象

    第一种方法: 注意引用:using System.Runtime.Serialization.Json; using System.IO; static void Main(string[] args ...

  5. gulp常用命令

    gulp 默认的执行的命名文件为gulpfile 换成其他命名就识别不了 因为需要安装两次gulp或者说其他插件,一个是全局-g安装一个是本地目录安装, 本地目录安装时目录移动或者名字被改变就会失效提 ...

  6. ubuntu 16.04 kinetic 安装rosbridge

    sudo apt-get install ros-kinetic-rosbridge-server

  7. Ubuntu 下载

    http://releases.ubuntu.com/

  8. python sort、sorted

    1. (1).sorted()方法返回一个新列表(默认升序). list.sort() (2).另一个不同:list.sort()方法仅被定义在list中,sorted()方法对所有的可迭代序列都有效 ...

  9. springboot入门(一)--快速搭建一个springboot框架

    原文出处 前言在开始之前先简单介绍一下springboot,springboot作为一个微框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...

  10. Eclipse 中 SDK无法更新---解决方法

    在SDK Manager -> tools -> options中: HTTP Proxy Server: mirrors.neusoft.edu.cn HTTP Proxy Port: ...