Rumah >Java >javaTutorial >Bagaimanakah ExecutorService Boleh Meningkatkan Pengendalian Tamat Masa Thread Atas TimerTask?

Bagaimanakah ExecutorService Boleh Meningkatkan Pengendalian Tamat Masa Thread Atas TimerTask?

Linda Hamilton
Linda Hamiltonasal
2024-12-20 05:01:12899semak imbas

How Can ExecutorService Improve Thread Timeout Handling Over TimerTask?

Tamamasa Benang: Pendekatan Alternatif

Walaupun TimerTask boleh mengendalikan tamat masa dalam urutan, ia bukanlah penyelesaian yang paling optimum. Pertimbangkan untuk menggunakan ExecutorService, kerana ia menyediakan pendekatan yang komprehensif untuk pengurusan thread dan tamat masa.

ExecutorService membolehkan anda membuat tugasan boleh dipanggil dan menyerahkannya untuk pelaksanaan. Setelah diserahkan, tugas itu boleh dipantau melalui objek Masa Depan. Dengan menentukan tamat masa dalam kaedah Future#get(), anda boleh mengawal berapa lama urutan harus dilaksanakan sebelum pengecualian dibuang.

Berikut ialah contoh pelaksanaan:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class Test {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(new Task());

        try {
            System.out.println("Started..");
            System.out.println(future.get(3, TimeUnit.SECONDS));
            System.out.println("Finished!");
        } catch (TimeoutException e) {
            future.cancel(true);
            System.out.println("Terminated!");
        }

        executor.shutdownNow();
    }
}

class Task implements Callable<String> {
    @Override
    public String call() throws Exception {
        // Replace this with your long-running task.
        Thread.sleep(4000);
        return "Ready!";
    }
}

Dalam ini senario, tugasan berjalan selama 4 saat sebelum selesai. Jika tamat masa dinaikkan kepada 5 saat, tugasan akan selesai tanpa ditamatkan. Jika tamat masa ditetapkan kepada tempoh yang lebih pendek, TimeoutException akan dilemparkan dan tugasan akan dibatalkan.

Untuk menyemak gangguan benang dalam tugasan yang berjalan lama, gunakan sementara (!Thread.interrupted() ) { ... } gelung. Dengan berbuat demikian, tugas itu boleh keluar dengan anggun apabila perlu.

Atas ialah kandungan terperinci Bagaimanakah ExecutorService Boleh Meningkatkan Pengendalian Tamat Masa Thread Atas TimerTask?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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