Rumah > Java > javaTutorial > Bagaimana untuk Menetapkan Tamat Masa untuk Benang dalam Java Menggunakan ExecutorService?

Bagaimana untuk Menetapkan Tamat Masa untuk Benang dalam Java Menggunakan ExecutorService?

Barbara Streisand
Lepaskan: 2024-12-16 12:55:17
asal
608 orang telah melayarinya

How to Set a Timeout for a Thread in Java Using ExecutorService?

Cara Menetapkan Tamat Masa untuk Thread

Seperti yang dibangkitkan dalam siasatan awal, terdapat kebimbangan tentang cara menyekat pelaksanaan utas masa. Matlamatnya adalah untuk mengendalikan situasi di mana utas mungkin memasuki gelung tak terhingga, menyebabkan utas induk menunggu selama-lamanya.

Satu penyelesaian yang dibincangkan melibatkan penggunaan TimerTask dalam kaedah run() Thread. Walau bagaimanapun, pendekatan yang lebih cekap ialah memanfaatkan kelas ExecutorService. Ini menyediakan mekanisme yang mudah untuk menetapkan tamat masa pada urutan.

Contoh pelaksanaan menggunakan ExecutorService boleh digambarkan seperti berikut:

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 TimeoutTest {
    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 {
        Thread.sleep(4000); // Simulate a long-running task that takes 4 seconds
        return "Ready!";
    }
}
Salin selepas log masuk

Dalam contoh ini, kelas Tugas merangkum panjang- menjalankan tugas. Kaedah ExecutorService.submit() digunakan untuk menyerahkan tugasan ini untuk dilaksanakan. Objek Masa Depan yang dikembalikan oleh submit() menyediakan mekanisme untuk mendapatkan semula hasil tugasan.

Kaedah Future.get() dipanggil dengan hujah tamat masa selama 3 saat. Jika tugasan selesai dalam tempoh masa ini, hasilnya dikembalikan. Walau bagaimanapun, jika tugasan mengambil masa lebih lama daripada 3 saat, TimeoutException dilemparkan. Dalam blok tangkapan, tugas dibatalkan dan "Ditamatkan!" mesej dicetak.

Selain itu, adalah penting untuk ambil perhatian bahawa dalam tugasan yang berjalan lama, semakan harus digabungkan untuk mengendalikan gangguan, menghalang tugas daripada berjalan selama-lamanya. Semakan ini boleh dilaksanakan menggunakan Thread.interrupted().

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Tamat Masa untuk Benang dalam Java Menggunakan 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