blob: 6b12168d6528d591e5349f628d095b3055c097d9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package java.util;
/**
* The {@code TimerTask} class represents a task to run at a specified time. The task
* may be run once or repeatedly.
*
* @see Timer
* @see java.lang.Object#wait(long)
*/
public abstract class TimerTask implements Runnable {
/* Lock object for synchronization. It's also used by Timer class. */
final Object lock = new Object();
/* If timer was cancelled */
boolean cancelled;
/* Slots used by Timer */
long when;
long period;
boolean fixedRate;
/*
* The time when task will be executed, or the time when task was launched
* if this is task in progress.
*/
private long scheduledTime;
/*
* Method called from the Timer for synchronized getting of when field.
*/
long getWhen() {
synchronized (lock) {
return when;
}
}
/*
* Method called from the Timer object when scheduling an event @param time
*/
void setScheduledTime(long time) {
synchronized (lock) {
scheduledTime = time;
}
}
/*
* Is TimerTask scheduled into any timer?
*
* @return {@code true} if the timer task is scheduled, {@code false}
* otherwise.
*/
boolean isScheduled() {
synchronized (lock) {
return when > 0 || scheduledTime > 0;
}
}
/**
* Creates a new {@code TimerTask}.
*/
protected TimerTask() {
}
/**
* Cancels the {@code TimerTask} and removes it from the {@code Timer}'s queue. Generally, it
* returns {@code false} if the call did not prevent a {@code TimerTask} from running at
* least once. Subsequent calls have no effect.
*
* @return {@code true} if the call prevented a scheduled execution
* from taking place, {@code false} otherwise.
*/
public boolean cancel() {
synchronized (lock) {
boolean willRun = !cancelled && when > 0;
cancelled = true;
return willRun;
}
}
/**
* Returns the scheduled execution time. If the task execution is in
* progress it returns the execution time of the ongoing task. Tasks which
* have not yet run return an undefined value.
*
* @return the most recent execution time.
*/
public long scheduledExecutionTime() {
synchronized (lock) {
return scheduledTime;
}
}
/**
* The task to run should be specified in the implementation of the {@code run()}
* method.
*/
public abstract void run();
}