Примечание переводчика: я лично думаю, что использование временных задач для запуска мусора не является хорошим примером. данные, файлы и т. Д.
В этой статье я представлю 3 различных метода реализации:
1. Обычная реализация потока
2. Реализация Timertask
3. Реализация PredulleDexeCutorService
1. Обычная тема
Это самое распространенное дело. Это может быть реализовано быстро и легко, код выглядит следующим образом:
Кода -копия выглядит следующим образом:
открытый класс Task1 {
public static void main (string [] args) {
// бежать за секунду
окончательное долгое время interval = 1000;
Runnable runnable = new Runnable () {
public void run () {
while (true) {
// -------- Код для запуска задачи
System.out.println ("Привет !!");
// ----------
пытаться {
Thread.sleep (TimeInterval);
} catch (прерванная экспрессия e) {
e.printstacktrace ();
}
}
}
};
Thread Think = New Thread (Runnable);
Thread.Start ();
}
}
2. Используйте таймер и Timertask
Приведенная выше реализация очень быстрая и простая, но ей также не хватает некоторой функциональности.
По сравнению с приведенным выше методом, использование таймера и Timertask имеет следующие преимущества:
1. Контролируется при запуске и отмене задач
2. Вы можете указать время задержки при выполнении задачи в первый раз
Во время реализации класс таймера может планировать задачи, а Timertask реализует конкретные задачи в методе run ().
Экземпляры таймера могут запланировать многозадачность, и это безопасно.
Когда конструктор таймера называется, он создает поток, который можно использовать для планирования задач.
Вот код:
Кода -копия выглядит следующим образом:
импортировать java.util.timer;
импортировать java.util.timertask;
открытый класс Task2 {
public static void main (string [] args) {
Timertask task = new timertask () {
@Override
public void run () {
// задача для запуска идет здесь
System.out.println ("Привет !!!");
}
};
Таймер timer = new Timer ();
длинная задержка = 0;
длинный периодпериод = 1 * 1000;
// планирует выполнение задачи в интервале
timer.scheduleatefixedrate (задача, задержка,
integerperiod);
} // конец основного
}
Эти классы существуют с JDK 1.3.
3. PredulledexeCutorService
PedulledExeCutorService был введен в качестве параллельного класса инструментов из Java SE 5 java.util.concurrent, который является наиболее идеальным методом реализации задачи.
По сравнению с двумя вышеупомянутыми методами, он имеет следующие преимущества:
1. По сравнению с единственным потоком таймера, он выполняет задачи через пул потоков.
2. Вы можете установить время задержки для выполнения первой задачи
3. Предоставьте хорошие соглашения для установления интервала времени выполнения
Ниже приведен код реализации.
Кода -копия выглядит следующим образом:
импортировать java.util.concurrent.executors;
Импорт java.util.concurrent.schedudexecutorservice;
импортировать java.util.concurrent.timeUnit;
открытый класс Task3 {
public static void main (string [] args) {
Runnable runnable = new Runnable () {
public void run () {
// задача для запуска идет здесь
System.out.println ("Привет !!");
}
};
SeduledExeCutorService Service = Исполнители
.newsingleThreadScheduleDexeCutor ();
service.scheduleatfixedrate (runnable, 0, 1, timeUnit.seconds);
}
}