Date , Timer & Timerask & Schedule

1 Date

System.out.println(new java.util.Date()); //代码
输出:Thu Jan 27 14:43:28 CST 2011
System.out.println(new java.util.Date().toLocaleString());  //代码
输出:2011-1-27 14:45:21

不过现在toLocaleString()方法已过时,由DateFormat.format(Date date)取代。
代码:

    DateFormat ddf = DateFormat.getDateInstance(); 
    DateFormat dtf = DateFormat.getTimeInstance(); 
    DateFormat ddtf = DateFormat.getDateTimeInstance(); 
    Date date = new Date(); 
    System.out.println("日期:" + ddf.format(date)); 
    System.out.println("时间:" + dtf.format(date)); 
    System.out.println("日期时间:" + ddtf.format(date)); 

    SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateTimeInstance(); 
    System.out.println("日期时间:" + sdf.format(date)); 
输出: 
    日期:2011-2-9
    时间:11:16:02
    日期时间:2011-2-9 11:16:02
    日期时间:2011-2-9 11:16:02 
以上是在window系统下,linux系统下不能这么处理,linux系统下用以上获取回来的初始时间格式与此不同。

2 Timer & Timerask

两个类Timer和Timerask用于完成一个完整的定时任务。
Timer一种工具,线程用其安排以后再后台线程中执行的任务。可以安排任务执行一次,或者定期重复执行。由Timerask: Timer 安排一次执行或者从夫执行的任务。即:Timer是一种定时器工具,用来在一个后台线程计划执行指定任务,而Timerask是一个抽象类,它的子类是可以被Timer计划的任务。

(1)Timer
Timer类可以保证多个线程可以共享单个Timer对象而无需进行外部同步,所以Timer类是线程安全的。但是由于每一个Timer对象对应的是单个后台线程,用于顺序执行所有的计时器任务,一般情况下我们的线程任务执行所消耗的时间应该非常短,但是由于特殊情况导致某个定时器任务执行的时间太长,那么他就会“独占”计时器的任务执行线程,其后的所有线程都必须等待它执行完,这就会延迟后续任务的执行,使这些任务堆积在一起,

(2) Timerask
TimerTask类是一个抽象类,由Timer安排为一次执行或重复执行的任务。它有一个抽象方法run()方法,该方法用于执行相应计时器任务要执行的操作。因此每一个具体的任务类都必须继承TimerTask,然后重写run()方法。


3 schedule

方法注释
schedule(TimerTask task, Date time)安排在指定的时间执行指定的任务
schedule(TimerTask task, Date firstTime, long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行
schedule(TimerTask task, long delay)安排在指定延迟后执行指定的任务
schedule(TimerTask task, long delay, long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行
scheduleAtFixedRate(TimerTask task, Date firstTime, long period)安排指定的任务在指定的时间开始进行重复的固定速率执行
scheduleAtFixedRate(TimerTask task, long delay, long period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行

同时也重载了scheduleAtFixedRate方法,scheduleAtFixedRate方法与schedule相同,只不过他们的侧重点不同,区别后面分析。

另外它还有两个非抽象的方法:

boolean cancel();//取消此计时器任务。
long scheduledExecutionTime();//返回此任务最近实际执行的安排执行时间。
`Timer.schedule()`方法可以用于在指定时间后执行任务,或者在指定延迟时间后执行任务。以下是一个使用`Timer.schedule()`方法的示例: ```java import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { public void run() { System.out.println("Timer task executed."); } public static void main(String[] args) { Timer timer = new Timer(); MyTimerTask myTask = new MyTimerTask(); // 在5秒后执行任务 timer.schedule(myTask, 5000); } } ``` 在上面的示例中,我们创建了一个`MyTimerTask`类,它继承了`TimerTask`类,并实现了`run()`方法。在`main()`方法中,我们创建了一个`Timer`对象和一个`MyTimerTask`对象,并使用`Timer.schedule()`方法在5秒后执行了任务。 除了指定延迟时间外,我们还可以使用`Timer.schedule()`方法指定任务的执行时间。例如,以下代码将在今天晚上11点01分执行任务: ```java import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { public void run() { System.out.println("Timer task executed."); } public static void main(String[] args) { Timer timer = new Timer(); MyTimerTask myTask = new MyTimerTask(); // 在今天晚上11点01分执行任务 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 1); calendar.set(Calendar.SECOND, 0); Date time = calendar.getTime(); timer.schedule(myTask, time); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值