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!"; } } }
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. }
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!