Concurrency Orta

Timer görevlerinden zamanlanmış executor'lara

Sağlam zamanlanmış işler için Timer ve TimerTask'ı ScheduledExecutorService ile değiştirin.

✕ Timer and TimerTask
Timer timer = new Timer("refresh-timer");
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        refresh();
    }
}, 0, 60_000);
✓ ScheduledExecutorService
ScheduledExecutorService scheduler =
        Executors.newScheduledThreadPool(2);

scheduler.scheduleAtFixedRate(
        this::refresh, 0, 1, TimeUnit.MINUTES);
Bu kodda bir sorun mu gördünüz? Bize bildirin.
🧵

Daha iyi izolasyon

Yapılandırılabilir bir iş parçacığı havuzu, ilgisiz zamanlamaların tek bir kırılgan worker'ı paylaşmasını önler.

🛡

Sağlam yürütme

Başarısız olan bir görev, scheduler'ın kendisini sonlandırmaz.

🎛

Kontrol edilebilir yaşam döngüsü

Future, iptal, gecikmeler ve kapatma standart executor API'lerini kullanır.

Eski Yaklaşım
Timer ve TimerTask
Modern Yaklaşım
ScheduledExecutorService
JDK'dan itibaren
5
Zorluk
Orta
Timer görevlerinden zamanlanmış executor'lara
Mevcut

JDK 5'ten (Eylül 2004) beri yaygın olarak kullanılabilir

Timer her görevi tek bir iş parçacığında çalıştırır, bu yüzden uzun süren bir görev diğerlerini geciktirir ve yakalanmamış bir istisna timer iş parçacığını sonlandırır. ScheduledExecutorService, executor çerçevesini kullanır, birden fazla worker'ı destekler, ScheduledFuture tanıtıcıları döndürür ve açık bir yaşam döngüsü yönetimi sağlar. Sahip bileşen, artık ihtiyaç duyulmadığında scheduler'ı kapatmalıdır.