遇到一个比较不常见的情况,我在流水线式执行一个方法,方法中涉及到数据的获取,有时候获取很快,有时候十几分钟都没结果,因为我这个任务要追求时间效率,可以牺牲小部分异常,所以想到方法超时放弃这个想法:如果这个方法执行超过60秒,就直接pass继续执行下一次。
具体其实是应用线程去实现这个想法:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import com.sun.corba.se.impl.orbutil.closure.Future;
import com.sun.corba.se.impl.orbutil.threadpool.TimeoutException;
public class ThreadTest {
public static void main(String[] args) throws InterruptedException,
ExecutionException {
final ExecutorService exec = Executors.newFixedThreadPool(1);
Callable<String> task = new Callable<String>() {
public String call() throws Exception {
//开始执行耗时操作
Thread.sleep(1000 * 5);
return "线程执行完成.";
}
};
try {
Future<String> future = exec.submit(task);
String obj = future.get(1, TimeUnit.SECOND); //任务处理超时时间设为 1 秒
System.out.println("任务成功返回:" + obj);
} catch (TimeoutException ex) {
System.out.println("处理超时啦....");
ex.printStackTrace();
} catch (Exception e) {
System.out.println("处理失败.");
e.printStackTrace();
}
// 关闭线程池
exec.shutdown();
}
}