Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Melaksanakan Gangguan Tugas Bermasa dalam Java ExecutorService?

Bagaimanakah Saya Boleh Melaksanakan Gangguan Tugas Bermasa dalam Java ExecutorService?

Patricia Arquette
Lepaskan: 2024-11-28 01:39:13
asal
694 orang telah melayarinya

How Can I Implement Timed Task Interruption in a Java ExecutorService?

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

  • beforeExecute: Apabila tugasan diserahkan, ia dijadualkan untuk gangguan menggunakan timeoutExecutor. ScheduledFuture dikembalikan dan disimpan dalam runningTasks, memetakan tugasan kepada tugas gangguan yang dijadualkan.
  • afterExecute: Setelah tugasan selesai, ScheduledFuture yang sepadan dialih keluar daripada runningTasks dan dibatalkan, mengganggu tugasan jika ia belum lagi selesai.
  • penutupan: Dengan anggun mematikan kedua-dua ThreadPoolExecutor dan ScheduledExecutorService.
  • tutup Sekarang: Mematikan kedua-dua ThreadPoolExecutor dan Executor secara paksa ScheduledExecutorService.

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);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan