package com.code.demo;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
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 FutureDemo {
public static int idx = 0;
public static void job() {
ExecutorService service = Executors.newSingleThreadExecutor();
Future<String> future = service.submit(new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println("\n开始执行任务"+idx);
int s = idx;
while(s>0) {
System.out.print(".");
TimeUnit.SECONDS.sleep(1);
s--;
}
System.out.println("任务"+idx+"完成");
return "ok";
}
});
try {
future.get(4, TimeUnit.SECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
future.cancel(true);
System.out.println("-----任务"+idx+"超时-----");
} finally {
service.shutdown();
System.out.println("清理资源");
}
}
public static void main(String[] args) {
for(int i=0; i<10; i++) {
idx = i;
job();
}
}
}
对于任务超时中断线程有什么好的建议请留下