在Java中沒有類似JavaScript中的setTimeout函數(shù)來設(shè)置超時(shí)時(shí)間。但是可以使用ExecutorService和Future來實(shí)現(xiàn)類似的功能,避免超時(shí)異常。
下面是一個(gè)示例代碼:
import java.util.concurrent.*;
public class TimeoutExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> {
// 這里執(zhí)行需要超時(shí)控制的任務(wù)
try {
Thread.sleep(5000); // 模擬一個(gè)長時(shí)間執(zhí)行的任務(wù)
return "Task completed";
} catch (InterruptedException e) {
return "Task interrupted";
}
});
try {
String result = future.get(3, TimeUnit.SECONDS); // 設(shè)置超時(shí)時(shí)間為3秒
System.out.println(result);
} catch (TimeoutException e) {
future.cancel(true); // 超時(shí)時(shí)取消任務(wù)
System.out.println("Task timed out");
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown();
}
}
在上面的示例中,通過ExecutorService的submit方法提交一個(gè)任務(wù),然后使用future.get方法設(shè)置超時(shí)時(shí)間為3秒。如果任務(wù)在3秒內(nèi)沒有完成,將會拋出TimeoutException異常,并取消任務(wù)執(zhí)行。如果任務(wù)在超時(shí)時(shí)間內(nèi)完成,則會返回結(jié)果。