【Java】【Android】【Future】监控判断方法调用是否超时 设置方法调用的超时时间

类:

java.util.concurrent.Future
    Future代表一个异步计算的结果
    它提供了方法来检查是否计算已经完成,还是正在计算而处于等待状态,并且也提供了获取计算结果 方法
    当计算完成后,只能通过get方法来获取执行结果,必要的话该方法会阻塞
    通过cancel方法可以取消计算。一旦计算已经完成,便无法取消

方法:

主要方法:
	cancel():取消任务
	get():等待任务执行完成,并获取执行结果
	get(long timeout, TimeUnit unit):在指定的时间内会等待任务执行,超时则抛异常

代码:

public class Test {
    
    
    public static void main(String[] args) {
    
    
    	//单线程
        Executor executor = Executors.newSingleThreadExecutor();
        //任务
        FutureTask<String> future = new FutureTask<String>(new Callable<String>() {
    
    
            public String call() throws Exception {
    
    
            	//Enter the code you want to operate with below
                Test demo = new Test();
                return demo.getValue();
            }
        });
        //执行
        executor.execute(future);
        try{
    
    
        	//Future最多会等待给定的时间来完成计算,然后检索其结果
        	//第一个参数:超时–等待的最长时间,超过这个时间就是抛出超时异常 
        	//第二个参数:unit–超时参数的时间单位 
        	//返回值: 计算结果结果
            String result = future.get(1, TimeUnit.SECONDS);
            System.out.println(result);
        }catch (InterruptedException e) {
    
    
           System.out.println("方法执行中断");
           //取消异步的任务
           //传入true会中断线程停止任务
           //传入false则会让线程正常执行至完成,并返回false
          // future.cancel(true);
        }catch (ExecutionException e) {
    
    
             System.out.println("Excution异常");
            // TODO: handle exception
            future.cancel(true);
        }catch (TimeoutException e) {
    
    
            // TODO: handle exception
             System.out.println("方法执行时间超时");
            //future.cancel(true);
        }
    }

    public String getValue(){
    
    
        try{
    
    
            Thread.sleep(1000);
        }catch (Exception e) {
    
    
        	// TODO: handle exception
            e.printStackTrace();
        }
        return "测试代码,成功返回";
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45265547/article/details/125262709