Timer 及 TimerTask 相关使用代码

代码1:
package  com.tg.email;

import  java.text.SimpleDateFormat;
import  java.util.Calendar;
import  java.util.Date;
import  java.util.Timer;
import  java.util.TimerTask;

public   class  Timeer {

    
public   static   void  showTimer() {
        TimerTask task 
=   new  TimerTask() {
            @Override
            
public   void  run() {
                System.out.print(
new  SimpleDateFormat( " HH:mm:ss " ).format(System.currentTimeMillis()));
                System.out.println(
" 执行定时任务!!! " );
            }
        };

        Calendar calendar 
=  Calendar.getInstance();
        
int  year  =  calendar.get(Calendar.YEAR);
        
int  month  =  calendar.get(Calendar.MONTH);
        
int  day  =  calendar.get(Calendar.DAY_OF_MONTH);
        
/** * 时间自己修改 ** */
        System.out.println(
" year: " + year);
        System.out.println(
" month: " + (month));
        System.out.println(
" day: " + day);
        
        calendar.set(year, month, day, 
13 00 03 );     // 主要改这里,年、月、日、时、分、秒
        Date date  =  calendar.getTime();
        Timer timer 
=   new  Timer();
        timer.schedule(task, date,
1000 );
    }


    
public   static   void  main(String[] args) {
        showTimer();
    }
}
代码2:
package
 com.lzw.schedule;

import  java.util.TimerTask;

public   abstract   class  SchedulerTask  implements  Runnable
{
    
final  Object lock  =   new  Object();

    
int  state  =  VIRGIN;

    
static   final   int  VIRGIN  =   0 ;

    
static   final   int  SCHEDULED  =   1 ;

    
static   final   int  CANCELLED  =   2 ;

    TimerTask timerTask 
=   null ;


    
protected  SchedulerTask()
    {

    }


    
public   abstract   void  run();


    
public   boolean  cancel()
    {
        
synchronized  (lock)
        {
            
if  (timerTask  !=   null )
            {
                timerTask.cancel();
            }
            
boolean  result  =  (state  ==  SCHEDULED);

            state 
=  CANCELLED;

            
return  result;
        }
    }


    
public   long  scheduleExecutionTime()
    {
        
synchronized  (lock)
        {
            
return  timerTask  ==   null   ?   0  : timerTask.scheduledExecutionTime();
        }
    }
}
代码3:
package
 com.lzw.schedule;

public   class  AlarmClock
{
    
private   final  Scheduler scheduler  =   new  Scheduler();

    
private   final   int  hourofDay, minute, second;


    
public  AlarmClock( int  hourOfDay,  int  minute,  int  second)
    {
        
this .hourofDay  =  hourOfDay;
        
this .minute  =  minute;
        
this .second  =  second;
    }


    
public   void  start()
    {
        scheduler.schedule(
new  SchedulerTask()
        {
            
public   void  run()
            {
                System.out.println(
" 时间到 " );
            }
        }, 
new  DailyIterator(hourofDay, minute, second));
    }


    
public   static   void  main(String[] args)
    {
        AlarmClock alarmClock 
=   new  AlarmClock( 17 58 0 );
        alarmClock.start();
    }
}
代码4:
package
 com.lzw.schedule;

import  java.util.Date;
import  java.util.Timer;
import  java.util.TimerTask;

public   class  Scheduler
{
    
class  SchedulerTimerTask  extends  TimerTask
    {
        
private  SchedulerTask schedulerTask  =   null ;

        
private  ScheduleIterator scheduleIterator  =   null ;


        
public  SchedulerTimerTask(SchedulerTask schedulerTask,
                                  ScheduleIterator scheduleIterator)
        {
            
this .schedulerTask  =  schedulerTask;
            
this .scheduleIterator  =  scheduleIterator;
        }


        
public   void  run()
        {
            schedulerTask.run();
            reschedule(schedulerTask, scheduleIterator);
        }
    }

    
private   final  Timer timer  =   new  Timer();


    
public  Scheduler()
    {
    }


    
public   void  cancel()
    {
        timer.cancel();
    }


    
public   void  schedule(SchedulerTask schedulerTask,
                         ScheduleIterator scheduleIterator)
    {
        Date time 
=  scheduleIterator.next();

        
if  (time  ==   null )
        {
            schedulerTask.cancel();
        }
        
else
        {
            
synchronized  (schedulerTask.lock)
            {
                
if  (schedulerTask.state  !=  SchedulerTask.VIRGIN)
                {
                    
throw   new  IllegalStateException( " Task already scheduled or cancelled " );
                }
                
                schedulerTask.state 
=  SchedulerTask.SCHEDULED;

                schedulerTask.timerTask 
=   new  SchedulerTimerTask(schedulerTask,
                                                                 scheduleIterator);

                timer.schedule(schedulerTask.timerTask, time);
            }
        }
    }


    
private   void  reschedule(SchedulerTask schedulerTask,
                            ScheduleIterator scheduleIterator)
    {
        Date time 
=  scheduleIterator.next();

        
if  (time  ==   null )
        {
            schedulerTask.cancel();
        }
        
else
        {
            
synchronized  (schedulerTask.lock)
            {
                
if  (schedulerTask.state  !=  SchedulerTask.CANCELLED)
                {
                    schedulerTask.timerTask 
=   new  SchedulerTimerTask(schedulerTask,
                                                                     scheduleIterator);

                    timer.schedule(schedulerTask.timerTask, time);
                }
            }
        }
    }
}
代码5:
package
 com.lzw.schedule;

import  java.util.Calendar;
import  java.util.Date;

public   interface  ScheduleIterator
{
    
public  Date next();
}


class  DailyIterator  implements  ScheduleIterator
{

    
private   final  Calendar calendar  =  Calendar.getInstance();

    
public  DailyIterator( int  hourOfDay,  int  minute,  int  second, Date date)
    {
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        calendar.set(Calendar.MILLISECOND, 
0 );
        
        
if  ( ! calendar.getTime().before(date)) {
            calendar.add(Calendar.DATE, 
- 1 );
        }
    }
    
    
public  DailyIterator( int  hourOfDay,  int  minute,  int  second)
    {
        Date date 
=   new  Date();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);
        calendar.set(Calendar.MILLISECOND, 
0 );
        
        
if  ( ! calendar.getTime().before(date)) {
            calendar.add(Calendar.DATE, 
- 1 );
        }
    }
    
    
public  Date next() {
        calendar.add(Calendar.DATE, 
1 );
        
return  calendar.getTime();
    }
}
代码6:
package
 com.lzw;

import  java.util.Calendar;
import  java.util.Date;
import  java.util.Timer;
import  java.util.TimerTask;

public   class  Test
{
    
private  Calendar startSee  =   null // 开始看病时间


    
public  Test()
    {
        startSee 
=  Calendar.getInstance();
        System.out.println(
" 感冒了. "   +  startSee.getTime().toLocaleString());
    }
    
    
public  Date getScheduleDate( int  day)
    {
//         startSee.add(Calendar.DATE, 1);    // 按天来计算
        startSee.add(Calendar.SECOND, day);  // 按秒来计算
         return  startSee.getTime();
    }

    
public   void  start( int  day)
    {
       
final  Timer timer  =   new  Timer();
       
        timer.schedule(
new  TimerTask()
        {
            
public   void  run()
            {
                System.out.println(
" 回访啦.. "   +   new  Date().toLocaleString());
                
                timer.cancel();
            }
        }, getScheduleDate(day));
    }
    
    
public   static   void  main(String[] args)
    {
        
// 由于timer调系统时间不太起作用,所以拿秒来做测试.
        Test test  =   new  Test();
        test.start(
10 );  
        test.start(
15 );  
        test.start(
20 );  
        test.start(
30 );  
    }
}

你可能感兴趣的:(timertask)