如何用Java实现unix的定时器的功能,超级难的问题!!

在unix中一般是执行crontab命令设置定时器定时启动任务,其格式如下:

  (1)  (2)  (3)  (4)  (5)  (6)
   0   0   *   *   3   /usr/bin/updatedb
      1. 分钟 (0-60)
      2. 小时 (0-23)
      3. 日 (1-31)
      4. 月 (1-12)
      5. 星期 (1-7)
      6. 所要运行的程序
现在的问题是如何用Java实现这样类似的程序,使得输入一个字符串也是这样的格式,可以定时启动程序??
格式比unix中还要复杂,他的命令中有八个字段,具体的见图片。图片中是七个字段,最后一个字段是要运行的命令。

quartz

可以使用Timer类的schedule方法...

具体用法可参看API...

用quartz就不难了,它也支持cron的。

使用quartz

改quartz源代码吧,比自己重写要快

quartz 能满足你的要求
资料:
[url=http://www.blogjava.net/Unmi/archive/2008/08/24/223926.html]Quartz Job Scheduling Framework[翻译]- 中文版 CHM 文件发布[/url]

Spring为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。Spring进一步降低了使用Quartz的难度,能以更具Spring风格的方式使用Quartz。概括来说它提供了两方面的支持:
1)为Quartz的重要组件类提供更具Bean风格的扩展类;
2)提供创建Scheduler的BeanFactory类,方便在Spring环境下创建对应的组件对象,并结合Spring容器生命周期进行启动和停止的动作。
[code="java"]<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<!-- 要调用的工作类 -->
<bean id="quartzJob" class="test.Task"></bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="jobtask"
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <!-- 调用的类 -->
    <property name="targetObject">
        <ref bean="quartzJob" />
    </property>
    <!-- 调用类中的方法 -->
    <property name="targetMethod">
        <value>work</value>
    </property>
</bean>
<!-- 定义触发时间 -->
<bean id="doTime"
    class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail">
        <ref bean="jobtask" />
    </property>
    <!-- cron表达式 -->
    <property name="cronExpression">
        [color=red]<value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value>[/color]        </property>
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
<bean id="startQuertz" lazy-init="false" autowire="no"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="doTime" />
        </list>
    </property>
</bean>


[/code]

要调度的工作类:
[code="java"]
public class Task{
public void work() {
System.out.println("Quartz的任务调度!");
}
}
[/code]

主测试文件:
[code="java"]
public class QuartzTest {
public static void main(String[] args) {
System.out.println("Test start.");
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
System.out.print("Test end..\n");

}

}
[/code]

使用quartz吧,具体运行程序,还没用过。

timer tasklist

Quartz很容易实现,这也叫难题。郁闷。有不明白的密我。

定时任务用Quartz实现就好了,
在sping中就包含了Quartz jar,Google一大堆

使用quartz可以很简单的觉解你的问题。

自己写一个服务程序吧,提供一个接口就行~~

quartz完全符合你的需求!

使用quartz 最佳选择;
不用我们重复制造轮子了。