Transferred from: http://blog.csdn.net/ecjtuxuan/article/details/2093757
————————————————————————————————————————
1, in the application development, often need some periodic operation, such as every 5 minutes to perform a certain operation.
The most convenient and efficient way to do this is to use the Java.util.Timer tool class.
Private Java.util.Timer Timer;
Timer = new timer (true);
Timer.schedule (
New Java.util.TimerTask () {public void run ()
{//server.checknewmail (); methods to Operate}}, 0, 5*60*1000);
The first argument is the method to be manipulated, the second parameter is the time to set the delay, the third parameter
Number is the setting of the period, how often it is performed.
After using these lines of code, the timer itself will be called once every 5 minutes
Server.checknewmail () method, you do not need to start the thread yourself. The timer itself is also multithreaded with
, multiple threads can share a timer without the need for external synchronization code.
2.
(1) Timer.schedule (TimerTask task,date time) to schedule the execution of the specified
Task.
(2) Timer.schedule (TimerTask task,date firsttime, long period) schedule the specified
The task starts at a specified time and repeats a fixed deferred execution.
(3) Timer.schedule (timertask task,long delay) Schedules the specified delay to execute after the specified
Task
(4) Timer.schedule (TimerTask task,long Delay,long period) to schedule a specified task
Repeats a fixed deferred execution starting after the specified delay.
(5) Timer.scheduleatfixedrate (TimerTask task,date Firsttime,long period)
Schedules the specified task to start at a fixed rate of repetition at a specified time.
(6) Timer.scheduleatfixedrate (TimerTask task,long delay,long period) Ann
The specified task executes at a fixed rate that repeats after the specified delay.
with Java Timer API for time scheduling development of the relevant points of attention
Java.util This package can find the timer and the TimerTask two classes. Timer directly from Object
inheritance, which is equivalent to a timer that can be used to specify a time to perform a task, or
Perform the same task repeatedly at a certain interval of time. Once a timer is created, a thread is generated
Run in the back to control the execution of the task. And TimerTask is the class used to accomplish a task,
It implements the Runnable interface, and therefore the equivalent of a thread.
How do you implement your own Task Scheduler?
1, inherit timertask, note that TimerTask is the implementation of runnable interface, so as long as the overloaded run ()
Method can be used.
2. Create a Timer object and call the schedule () method.
Related points of attention analysis:
1, task scheduling should give priority to real-time guarantee
Because of the nature of Java, and in the process of developing the JDK to take into account different platforms, and different platforms
Thread scheduling mechanism is different, so the JVM's thread scheduling mechanism under various platforms is inconsistent.
Thus the timer cannot guarantee that the task executes within the specified time. In addition, because TimerTask is implemented
Runnable interface, after TimerTask is put into the thread queue for a period of sleep (wait),
When the timertask is called to the specified time, the exact timing of execution depends on the JVM's scheduling policy
And how many threads are still waiting for CPU processing. Therefore, there is no guarantee that the task will be at the specified time
Internal execution. There are typically two scenarios in which the task is delayed execution:
(1), there are a large number of threads waiting to execute
(2), the effect of GC mechanism causes delay
This is why there are two sets of scheduling methods in the Timer API. That
(1), schedule ()
Scheduling with fixed delays. When you use this method, each delay in the execution of a task is propagated to any subsequent
Implementation of the services.
(2), Scheduleasfixedrate ()
Scheduling with fixed ratios. When using this method, all subsequent executions are scheduled according to the initial execution time,
So you want to reduce latency.
The specific method you use depends on which parameters are more important to your program or system.
2, each Timer object to start a thread in the background. This property is not pushed in some managed environments
Applications, such as in the application server. Because these threads are not within the control of the container.
The Timer class and the TimerTask class in the specific Java API are described below:
Java.util
class Timer
Java.lang.Object
Java.util.Timer
public class Timer
Extends Object
A thread facility that is used to schedule tasks to be performed later in a background thread. You can schedule a task to execute once,
or repeat them on a regular basis.
corresponding to each Timer object is a single background thread, which is used to perform all timer tasks sequentially.
The timer task should be completed quickly. If the time to complete a timer task is too long, it will "
The task execution thread for the timer. As a result, this may delay the execution of subsequent tasks, and these tasks
May be "stacked together" and can be quickly and continuously in the final completion of the above-mentioned unpleasant tasks
To execute.
After the last reference to the Timer object is complete, and all outstanding tasks are completed, the
The task execution thread of the timer terminates normally (and becomes the object of garbage collection). But it's probably going to be
Occurs after a long time. By default, the task execution thread does not run as a daemon thread , so
It can prevent the application from terminating. If the caller wants to quickly terminate the task execution thread of the timer, that
The caller should invoke the timer's Cancel method.
If the task execution thread of the timer is unexpectedly terminated, for example by calling its Stop method, then all
Subsequent attempts to schedule a task on that timer will cause illegalstateexception, as if invoking the
The Cancel method of the timer.
This class is thread-safe: Multiple threads can share a single Timer object without having to synchronize externally.
This class does not provide a real-time guarantee: It uses the object.wait (long) method to schedule tasks.
Implementation considerations: This class can be extended to a large number of simultaneous scheduled tasks (there are thousands of of them without problems).
Internally, it uses a binary heap to represent its task queue, so the overhead of scheduling a task is O (log n),
where n is the number of tasks scheduled at the same time.
Implementation considerations: All construction methods start the timer thread.
Start from the following versions:
1.3
See also:
TimerTask, object.wait (Long)
Construction Method Summary
Timer ()
Creates a new timer.
Timer (Boolean Isdaemon)
Creates a new timer that specifies its associated thread to run as a daemon.
Timer (String name)
Creates a new timer whose associated thread has the specified name.
Timer (String name, Boolean Isdaemon)
Creates a new timer whose associated thread has the specified name and can be specified as a daemon to be shipped
Yes.
Method Summary
void Cancel()
Terminates this timer, discarding all currently scheduled tasks.
int purge()
Removes all canceled tasks from this timer's task queue.
void Schedule(timertask task, Date time)
Schedules the specified task to execute at the specified time.
void Schedule(timertask task, Date Firsttime, long period)
Schedules the specified task to begin repeating fixed deferred execution at a specified time.
void Schedule(timertask task, long delay)
Schedules the specified task to execute after a specified delay.
void Schedule(timertask task, long delay, long period)
Schedules the specified task to start repeating fixed deferred execution from the specified delay.
void scheduleatfixedrate(timertask task, Date Firsttime, long period)
Schedules the specified task to start at a fixed rate of repetition at a specified time.
void scheduleatfixedrate(timertask task, long delay, long period)
Schedules the specified task to begin repeating a fixed rate of execution after a specified delay.
from the class Java.lang. Object Methods of Inheritance
Clone, Equals, Finalize, GetClass, Hashcode, notify, Notifyall, toString, wait, wait, wait
Construction Method Details
Timer
Public Timer ()
Creates a new timer. The associated thread is not running as a daemon.
See also:
Thread, Cancel ()
Timer
Public Timer (Boolean Isdaemon)
Creates a new timer that specifies its associated thread to run as a daemon. If the timer will be used to
When you schedule a duplicate maintenance activity, the daemon thread is invoked, and the daemon thread must be called during the application's run.
However, the operation should not prolong the life cycle of the program.
Parameters:
Isdaemon-True if the related thread should be run as a daemon.
See also:
Thread, Cancel ()
Timer
Public Timer (String name)
Creates a new timer whose associated thread has the specified name. The associated thread is not shipped as a daemon
Yes.
Parameters:
Name-the names of the related threads.
Thrown:
NullPointerException-if name is null.
Start from the following versions:
1.5
See also:
Thread.getname (), Thread.isdaemon ()
Timer
Public Timer (String name,
Boolean Isdaemon)
Creates a new timer whose associated thread has the specified name and can be specified as a daemon to be shipped
Yes.
Parameters:
Name-the names of the related threads.
Isdaemon-True if the related thread should be run as a daemon.
Thrown:
NullPointerException-if name is null.
Start from the following versions:
1.5
See also:
Thread.getname (), Thread.isdaemon ()
Method details
Schedule
public void Schedule (TimerTask task,
Long delay)
Schedules the specified task to execute after a specified delay.
Parameters:
Task-the tasks that you want to schedule.
Delay-the time, in milliseconds, before the task is executed.
Thrown:
IllegalArgumentException-If delay is a negative number, or delay +
System.currenttimemillis () is a negative number.
IllegalStateException-If the task has been scheduled or canceled, or the timer has been canceled.
Schedule
public void Schedule (TimerTask task,
Date time)
Schedules the specified task to execute at the specified time. If this time has passed, schedule the task to execute immediately.
Parameters:
Task-the tasks that you want to schedule.
Time-When the task was executed.
Thrown:
IllegalArgumentException-If Time.gettime () is a negative number.
IllegalStateException-If the task has been scheduled or canceled, the timer has been canceled, or the timing
The device thread has terminated.
Schedule
public void Schedule (TimerTask task,
Long delay,
Long period)
Schedules the specified task to start repeating fixed deferred execution from the specified delay. At an approximate fixed time
Interval (delimited by the specified period) for subsequent execution.
In a fixed deferred execution, each execution is scheduled based on the actual execution time of the previous execution. Such as
For any reason (such as a garbage collection or other background activity), the
The continuation of the implementation will also be delayed. In the long run, the frequency of execution is generally slightly slower than the specified period of the inverted
Number (assuming that the system clock on which object.wait (long) depends is accurate).
Fixed-delay execution applies to repetitive activities that require "smooth" running. In other words, it fits
It is more important to keep the frequency accurate in the short run than in the long run. This bag
Include most animation tasks, such as a blinking cursor at a fixed time interval. This also includes responding to human
The fixed activity performed by the activity, such as automatically repeating the input character when the key is pressed.
Parameters:
Task-the tasks that you want to schedule.
Delay-the time, in milliseconds, before the task is executed.
Period-the time interval between each successor task, in milliseconds.
Thrown:
IllegalArgumentException-If delay is a negative number, or delay +
System.currenttimemillis () is a negative number.
IllegalStateException-If the task has been scheduled or canceled, the timer has been canceled, or the timing
The device thread has terminated.
Schedule
public void Schedule (TimerTask task,
Date Firsttime,
Long period)
Schedules the specified task to begin repeating fixed deferred execution at a specified time. To approximate fixed time between
Intervals (separated by the specified period) for subsequent execution.
In a fixed deferred execution, each execution is scheduled based on the actual execution time of the previous execution. Such as
For any reason (such as a garbage collection or other background activity), the
The continuation of the implementation will also be delayed. In the long run, the frequency of execution is generally slightly slower than the specified period
The countdown (assuming that object.wait (long) depends on the system clock is accurate).
Fixed deferred execution is for repetitive execution activities that require "smooth" running. Other words
It is suitable for activities that are more accurate in the short run than those that are more important in the long run.
This includes most animation tasks, such as the blinking cursor at fixed intervals. This also includes a response
Fixed activities performed by human activities, such as the automatic repetition of input characters when holding down a key.
Parameters:
Task-the tasks that you want to schedule.
Firsttime-time when the task was first executed.
Period-the time interval between each successor task, in milliseconds.
Thrown:
IllegalArgumentException-If Time.gettime () is a negative number.
IllegalStateException-If the task has been scheduled or canceled, the timer has been canceled, or the timing
The device thread has terminated.
Scheduleatfixedrate
public void Scheduleatfixedrate (TimerTask task,
Long delay,
Long period)
Schedules the specified task to begin repeating a fixed rate of execution after a specified delay. At an approximate fixed time
Interval (delimited by the specified period) for subsequent execution.
In a fixed rate execution, each execution is scheduled according to the scheduled initial execution time. If the
Delay a execution for any reason, such as garbage collection or other background activity, it will quickly
There are two or more executions in succession, so that subsequent executions can "catch up". From long
In the long run, the frequency of execution will be exactly the reciprocal of the specified period (assuming object.wait (long)
Depends on the system clock is accurate).
Fixed rate execution applies to repetitive execution activities that are sensitive to absolute time, such as hourly quasi-
Or run scheduled maintenance activities at specific times of the day. It also applies To
Repetitive activities that are important to complete the total time of a fixed number of executions, such as Countdown timings
The device, ticks once every second for a total of 10 seconds. Finally, fixed rate execution applies to scheduling multiple
Recurring timer tasks that must be kept in sync with each other.
Parameters:
Task-the tasks that you want to schedule.
Delay-the time, in milliseconds, before the task is executed.
Period-the time interval between each successor task, in milliseconds.
Thrown:
IllegalArgumentException-If delay is a negative number, or delay +
System.currenttimemillis () is a negative number.
IllegalStateException-If the task has been scheduled or canceled, the timer has been canceled, or the timing
The device thread has terminated.
Scheduleatfixedrate
public void Scheduleatfixedrate (TimerTask task,
Date Firsttime,
Long period)
Schedules the specified task to start at a fixed rate of repetition at a specified time. To approximate fixed time between
Intervals (separated by the specified period) for subsequent execution.
In a fixed rate execution, each execution is scheduled relative to the scheduled initial execution time. If
Delay a execution for any reason, such as garbage collection or other background activity, it will quickly
Two or more times in a row, enabling subsequent execution to catch up. In the long run.
See, the frequency of execution will be exactly the reciprocal of the specified period (assuming that object.wait (long)
Depends on the system clock is accurate).
Fixed rate execution applies to repetitive execution activities that are sensitive to absolute time, such as hourly quasi-
Or run scheduled maintenance activities at specific times of the day. It also applies To
Repetitive activities that are important to complete the total time of a fixed number of executions, such as Countdown timings
The device, ticks once every second for a total of 10 seconds. Finally, the fixed rate execution applies to scheduling multiple
Recurring timer tasks that must be kept in sync with each other.
Parameters:
Task-the tasks that you want to schedule.
Firsttime-time when the task was first executed.
Period-the time interval between each successor task, in milliseconds.
Thrown:
IllegalArgumentException-If Time.gettime () is a negative number.
IllegalStateException-If the task has been scheduled or canceled, the timer has been canceled, or the timing
The device thread has terminated.
Cancel
public void Cancel ()
Terminates this timer, discarding all currently scheduled tasks. This does not interfere with the tasks that are currently being performed, such as
The presence of the fruit). Once the timer is terminated, its execution thread is terminated, and it is not possible to schedule more
Multi-tasking.
Note that this method is called within the Run method of the timer task called by this timer, and you can
Absolutely ensure that the task you are performing is the last task that this timer performs.
This method can be called repeatedly, but the second and subsequent calls are not valid.
Purge
public int Purge ()
Removes all canceled tasks from this timer's task queue. The behavior of calling this method on a timer does not
, you will not be able to reference the canceled task in the queue. If there are no external references to these tasks, the
They become eligible objects for garbage collection.
Most programs do not need to call this method. It is designed to be used in rare applications where these programs can be
Cancel a large number of tasks. Call this method to exchange space for time: The runtime of this method may
is proportional to n + C log n, where n is the number of tasks in the queue, and C is the cancellation of any
The number of services.
Note that calling this method is allowed on tasks scheduled from this timer.
Return:
The number of tasks to remove from the queue.
Start from the following versions:
1.5
The following is an introduction to the TimerTask class
Java.util
class TimerTask
Java.lang.Object
Java.util.TimerTask
All implemented interfaces:
Runnable
Public abstract class TimerTask
Extends Object
Implements Runnable
A task that is scheduled to be performed or performed repeatedly by a timer.
Start from the following versions:
1.3
See also:
Timer
Construction Method Summary
Protected timertask()
Creates a new timer task.
Method Summary
Boolean cancel()
Cancels this timer task.
abstract void Run()
The action to be performed by this timer task.
Long scheduledexecutiontime()
Returns the schedule execution time that this task has recently actually performed.
from the class Java.lang. Object Methods of Inheritance
Clone, Equals, Finalize, GetClass, Hashcode, notify, Notifyall, toString, wait, wait, wait
Construction Method Details
TimerTask
Protected TimerTask ()
Creates a new timer task.
Method details
Run
public abstract void Run ()
The action to be performed by this timer task.
Designated by:
Run in the interface runnable
See also:
Thread.run ()
Cancel
public boolean cancel ()
Cancels this timer task. If the task is scheduled for a single execution and is not yet running, or has not been scheduled, always
Will not run. If the task is scheduled to execute repeatedly, it will never run again. (If this call occurs, the task
is running, the task will run out, but will never run again. )
Note that calling this method from the run method of the repeating timer task absolutely guarantees that the timer
Service will never run again.
This method can be called repeatedly, and the second and subsequent invocations are invalid.
Return:
Returns true if this task is scheduled to execute once and has not been run, or if the task is scheduled to be repeated.
If the task is scheduled to be executed once and is already running, or if the task has not been scheduled, or the task has been taken
Returns False if it is eliminated. (Generally, if this method prevents one or more scheduled executions from occurring, it returns
True )
Scheduledexecutiontime
Public long Scheduledexecutiontime ()
Returns the schedule execution time that this task has recently actually performed. (If this method is called during task execution,
The return value is the scheduled execution time that is performed for this task. )
This method is typically called from the Run method of a task to determine whether the current task execution can
Ensure full and timely completion of scheduled activities:
public void Run () {
if (System.currenttimemillis ()-Scheduledexecutiontime ()
>=
max_tardiness)
Return Too late; Skip this execution.
Perform the Task
}
Typically, this method is not used with repetitive tasks that are performed with fixed delays , because their scheduled execution time allows
Float over time, so it makes no sense.
Return:
The time that this task has recently been scheduled to execute, in the format returned by Date.gettime (). If the task is already open
Initial execution, the return value is indeterminate.
Use of the Java Timer (timer)