Java定时任务的三种实现方法_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1993 | 回复: 0   主题: Java定时任务的三种实现方法        下一篇 
    本主题由 koei123 于 2015-6-1 14:53:26 移动
刘习托
注册用户
等级:中士
经验:208
发帖:66
精华:0
注册:2011-11-23
状态:离线
发送短消息息给刘习托 加好友    发送短消息息给刘习托 发消息
发表于: IP:您无权察看 2015-5-7 15:44:48 | [全部帖] [楼主帖] 楼主

一、普通thread

这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下:

public class Task1 {
      public static void main(String[] args) {
            // run in a second
            final long timeInterval = 1000;
            Runnable runnable = new Runnable() {
                  public void run() {
                        while (true) {
                              // ------- code for task to run
                              System.out.println("Hello !!");
                              // ------- ends here
                              try {
                                    Thread.sleep(timeInterval);
                              } catch (InterruptedException e) {
                                    e.printStackTrace();
                              }
                        }
                  }
            };
            Thread thread = new Thread(runnable);
            thread.start();
      }
}


二、用Timer和TimerTask

上面的实现是非常快速简便的,但它也缺少一些功能。
用Timer和TimerTask的话与上述方法相比有如下好处:

1.当启动和去取消任务时可以控制
2.第一次执行任务时可以指定你想要的delay时间

在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。
Timer实例可以调度多任务,它是线程安全的。
当Timer的构造器被调用时,它创建了一个线程,这个线程可以用来调度任务。
下面是代码:

import java.util.Timer;
import java.util.TimerTask;
public class Task2 {
      public static void main(String[] args) {
            TimerTask task = new TimerTask() {
                  @Override
                  public void run() {
                        // task to run goes here
                        System.out.println("Hello !!!");
                  }
            };
            Timer timer = new Timer();
            long delay = 0;
            long intevalPeriod = 1 * 1000;
            // schedules the task to be run in an interval
            timer.scheduleAtFixedRate(task, delay,
            intevalPeriod);
      } // end of main
}


这些类从JDK 1.3开始存在。

三、ScheduledExecutorService

ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。
相比于上两个方法,它有以下好处:

1.相比于Timer的单线程,它是通过线程池的方式来执行任务的
2.可以很灵活的去设定第一次执行任务delay时间
3.提供了良好的约定,以便设定执行的时间间隔

下面是实现代码,我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
      public static void main(String[] args) {
            Runnable runnable = new Runnable() {
                  public void run() {
                        // task to run goes here
                        System.out.println("Hello !!");
                  }
            };
            ScheduledExecutorService service = Executors
            .newSingleThreadScheduledExecutor();
            service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
      }
}


--转自 北京联动北方科技有限公司

该贴由koei123转至本版2015-6-1 14:53:26



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论