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!