java 控制方法超时

对执行方法进行超时控制:
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;
    }

 

其它我们自己也可以写一个对方法执行超时的控制:

    先设一个共享变量,

    用一个主线程去睡眠超时时间,用子线程去执行方法体.当子线程运行完成时,

    去更改这个共享变量的值(坐一个标记).当主线程继续执行时,判断这个共享变量的值是否有改变,

    如果有的话,则说明这个方法已经执行完成..

    如果没有改变的话,说明方法执行超时,终止子线程.

你可能感兴趣的:(java,活动)