对执行方法进行超时控制:
public static boolean executeTimeControlMethod(Runnable runable, long timeout) {
// 创建一个使用单个 worker 线程的 Executor
ExecutorService service = Executors.newSingleThreadExecutor();
//提交一个 Runnable 任务用于执行,跟踪一个或多个异步任务执行状况而生成 Future 的方法。
//submit(Runnable task, T result) task - 要提交的任务 result - 返回的结果
Future result = service.submit(runable, 1);
try {
//get(long timeout, TimeUnit unit) 等待timeout时间之后,检索其结果
//正常的应该返回submit方法传入的result
if (result.get(timeout, TimeUnit.MILLISECONDS) != null) return true;
//也可以通过cancel(boolean mayInterruptIfRunning) 取消对此任务的执行
//当调用 cancel 时,如果调用成功,而此任务尚未启动,则此任务将永不运行。
// 试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。
service.shutdownNow();
} catch (Exception e) {
}
return false;
}
其它我们自己也可以写一个对方法执行超时的控制:
先设一个共享变量,
用一个主线程去睡眠超时时间,用子线程去执行方法体.当子线程运行完成时,
去更改这个共享变量的值(坐一个标记).当主线程继续执行时,判断这个共享变量的值是否有改变,
如果有的话,则说明这个方法已经执行完成..
如果没有改变的话,说明方法执行超时,终止子线程.