本帖最后由 施大勇 于 2013-9-28 15:38 编辑
- package timerTesk;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.ScheduledExecutorService;
- import java.util.concurrent.TimeUnit;
- public class TeskTest {
- //1.3之后的功能。定时调度。
- public static void main(String[] args) {
- //用TimerTask类定义一个定时任务,此类是Runnable接口的子类,必须重写void()方法。
- /*TimerTask task=new TimerTask(){
- public void run(){
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date dateNow=new Date();
- System.out.println(df.format(dateNow));
- }
- };*/
- //定义一个计时器,通过Tiemr类来定义,调用此类的构造方法时启动一个定时器。
- /*Timer timer=new Timer();
- timer.schedule(task, 1000, 5000);*/ //1秒后执行,以后间隔5秒周期执行。
- /*schedule()有很多重载方法,分别对应着不同的定时调度方式,同时还有
- * public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)指定某一个时间点后周期执行。
- * public void scheduleAtFixedRate(TimerTask task,long delay,long period)指定一段时间后周期执行。
- */
- //1.5之后出现的线程池,将线程的定时与任务封装成为一个对象,这个对象中提供了任务的调度方法
- ScheduledExecutorService timer1 = Executors.newScheduledThreadPool(1);
- timer1.scheduleAtFixedRate(
- new Runnable(){
- public void run(){
- SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- Date dateNow=new Date();
- System.out.println(df.format(dateNow));
- }
- },
- 5,
- 5,
- TimeUnit.SECONDS);
- //从上面可以看出,这两种形式都完成了同样的功能,只不过第二种方式最后一个参数可以设置时间的单位。
- //而下面的代码我们可以看到主要是用于提交任务,即ExecutorService主要用于提交,但它不会自己执行,需要有程序调用它才执行。
- //同时它有多种提交方式,可以提交一组任务。方法:invokeAny(),invokeAll();护展了Executor只能提交一个任务的execute()方法。
- ExecutorService pool = Executors.newSingleThreadExecutor();//线程池,产生一组线程 。
- pool.execute(new Runnable(){//线程池取了一个线程,方法中的内部类。
- public void run(){
- }
- });
- }
- }
- 以上代码是我自己的一点看法,有不对的地方请各位大侠指点,并求各位有深入理解的能够补充说明,在这里多多交流.
复制代码 |
|