Mengganggu Tugasan dalam ExecutorService dengan Tamat Masa
Melaksanakan ExecutorService tersuai yang mengendalikan gangguan tugasan selepas tamat masa boleh menjadi mencabar. Walau bagaimanapun, rangka kerja serentak Java menyediakan penyelesaian yang mudah menggunakan ScheduledExecutorService.
ScheduledExecutorService untuk Tamat Masa Tugasan
A ScheduledExecutorService membenarkan penjadualan tugasan untuk pelaksanaan atau selepas tempoh tertentu selang waktu. Dengan memanfaatkan ciri ini, anda boleh membuat ExecutorService tersuai yang memantau tugasan yang diserahkan dan mengganggunya jika ia melebihi tamat masa yang telah ditetapkan.
Pelaksanaan TimeoutThreadPoolExecutor
Satu pendekatan untuk mencipta sedemikian ExecutorService ialah kelas TimeoutThreadPoolExecutor, yang memanjangkan ThreadPoolExecutor standard. Ia menyepadukan ScheduledExecutorService (timeoutExecutor) dan peta serentak (runningTasks) untuk menjejak tugas yang sedang dijalankan dan menjadualkan gangguannya.
Fungsian TimeoutThreadPoolExecutor
Penggunaan
Untuk menggunakan ExecutorService tersuai ini, nyatakan TimeoutThreadPoolExecutor dengan parameter yang dikehendaki dan mula menyerahkan tugas. Tugasan akan terganggu selepas tamat masa yang ditentukan jika ia belum selesai.
Kaedah Alternatif Menggunakan Jadual
Satu lagi pendekatan untuk mengganggu tugasan yang sudah lama dijalankan dalam ExecutorService ialah untuk menggunakan kaedah jadual yang disediakan oleh ScheduledExecutorService. Anda boleh menyerahkan dua tugasan: satu yang melaksanakan tugasan sebenar dan satu lagi yang membatalkannya selepas tamat masa yang ditentukan.
Contoh Kod
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); Future handler = executor.submit(new Callable(){ ... }); executor.schedule(new Runnable(){ public void run(){ handler.cancel(); } }, 10000, TimeUnit.MILLISECONDS);
Kaedah ini membolehkan anda untuk laksanakan tugas dengan tamat masa 10 saat, selepas itu ia akan dibatalkan dan terganggu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Gangguan Tugas Bermasa dalam Java ExecutorService?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!