Rumah > Java > javaTutorial > Bagaimana untuk Menghabiskan Benang dengan Tepat di Java?

Bagaimana untuk Menghabiskan Benang dengan Tepat di Java?

Mary-Kate Olsen
Lepaskan: 2024-12-19 00:18:16
asal
837 orang telah melayarinya

How to Precisely Timeout a Thread in Java?

Tamat Masa Benang dengan Ketepatan

Untuk menetapkan had masa bagi urutan, pertimbangkan untuk menggunakan ExecutorService dan bukannya Pemasa. ExecutorService menawarkan penyelesaian yang fleksibel untuk mengawal pelaksanaan thread dalam tempoh tertentu.

Berikut ialah coretan kod yang diperhalusi menggunakan ExecutorService:

import java.util.concurrent.*;

public class ThreadTimeout {

    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();
    }

    static class Task implements Callable<String> {
        @Override
        public String call() throws Exception {
            // Your long-running task should go here.
            return "Ready!";
        }
    }
}
Salin selepas log masuk

Dengan memanfaatkan Future#get(), anda boleh mewujudkan tamat masa untuk tugasan. Jika tugasan selesai dalam masa itu, hasilnya akan diambil seperti yang diharapkan. Walau bagaimanapun, jika ia gagal disiapkan dalam masa yang diperuntukkan, blok tangkapan akan dilaksanakan, membolehkan anda membatalkan tugasan.

Penjelasan mengenai penggunaan sleep()

Kemasukan sleep() dalam contoh yang disediakan adalah semata-mata untuk tujuan demonstrasi. Ia bertujuan untuk mensimulasikan tugasan yang telah lama dijalankan dalam SSCCE. Dalam senario sebenar anda, gantikan sleep() dengan tugasan jangka panjang yang anda inginkan.

Untuk mengelakkan kemungkinan kebuntuan, adalah penting untuk menyemak secara berkala dalam tugasan yang berjalan lama sama ada urutan anda telah terganggu, seperti yang dilihat dalam coretan kod berikut:

while (!Thread.interrupted()) {
    // Perform your long-running task here.
}
Salin selepas log masuk

Pendekatan berkaedah ini akan memastikan urutan anda bertindak balas dengan segera kepada permintaan gangguan dan dengan anggun ditamatkan apabila tamat masa.

Atas ialah kandungan terperinci Bagaimana untuk Menghabiskan Benang dengan Tepat di Java?. 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