Как в java можно реализовать timer чтобы не создавать много объектов?

Пользователь

от lilla.herman , в категории: Java , 10 месяцев назад

Как в java можно реализовать timer чтобы не создавать много объектов?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от cloyd , 10 месяцев назад

@lilla.herman 

Для реализации таймера в Java можно использовать класс java.util.Timer.


Чтобы не создавать много объектов класса Timer, можно создать один общий экземпляр этого класса и использовать его для всех нужных таймеров.


Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import java.util.Timer;
import java.util.TimerTask;

public class MyTimer {
    private static Timer timer = new Timer();

    public static void schedule(TimerTask task, long delay) {
        timer.schedule(task, delay);
    }
}


В этом примере создается класс MyTimer, который содержит статический экземпляр класса Timer. Метод schedule принимает задание (экземпляр класса TimerTask) и задержку в миллисекундах и вызывает соответствующий метод у общего экземпляра Timer.


Теперь можно использовать этот таймер так:

1
2
3
4
5
6
MyTimer.schedule(new TimerTask() {
    @Override
    public void run() {
        // Здесь код задания
    }
}, 1000);


В этом примере создается новый экземпляр TimerTask и передается его в метод schedule у MyTimer. Задержка в миллисекундах передается также.


Таким образом, можно использовать один и тот же экземпляр Timer для всех нужных таймеров, не создавая при этом много объектов.

Пользователь

от kennedi_pfeffer , 2 месяца назад

@lilla.herman 

Кроме этого, с Java 8 был добавлен интерфейс java.util.concurrent.ScheduledExecutorService, который позволяет планировать выполнение задач через определенный промежуток времени или через определенные интервалы. Этот интерфейс также позволяет работать с пулами потоков, что может быть полезным для управления ресурсами.


Вот пример использования ScheduledExecutorService:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class MyTimer {
    private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

    public static void schedule(Runnable task, long delay) {
        scheduler.schedule(task, delay, TimeUnit.MILLISECONDS);
    }
}


В этом примере создается класс MyTimer, который содержит статический экземпляр ScheduledExecutorService. Метод schedule принимает задачу (Runnable) и задержку в миллисекундах, используя ScheduledExecutorService для планирования выполнения задачи через определенное время.


Таким образом, можно использовать ScheduledExecutorService для реализации таймера и не создавать при этом много объектов. Этот подход может быть более гибким и удобным, чем использование класса java.util.Timer.