Rumah >Java >javaTutorial >Bagaimana untuk Menetapkan Tamat Masa untuk Benang dalam Java Menggunakan 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!"; } }
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!