• java future callable


    有个需求,数据库有两个字段,ip和端口。是很多其他数据库的地址。现在需要下载这些数据库的数据

    之前的做法是

    while(true){

     数据库读出一行为下载的数据

    下载数据

    }

    但是下载数据的时候可能会假死,然后线程阻塞了。除非重启继续下载。

    现在采用future和callable来配合下载。

    callable来下载数据。 future来控制流程。

    public class CallableDemo implements Callable<String> {
        @Override
        public String call() throws Exception {
            //假设随机的运行时间
            Random r =new Random();
            int i = r.nextInt(5);
            TimeUnit.SECONDS.sleep(i);
            return "success";
        }
    }
    public class FutureDemo {
    
        public static void main(String[] args)  throws  Exception{
    
            ExecutorService executor = Executors.newCachedThreadPool();
            for (int i = 0; i < 5; i++) {
                try {
                    CallableDemo callableDemo =new CallableDemo();
                    FutureTask<String> futureTask =new FutureTask(callableDemo);
                    executor.submit(futureTask);
                    String s = futureTask.get(3,TimeUnit.SECONDS);
                    System.out.println(s);
                }catch (Exception e ){
                    System.err.println("e = "+e.getMessage());
                }
            }
        }
    }

    运行结果,某些请求会超过我们设定的时间,如果还未完成,就继续处理下一个。至少没有假死掉

  • 相关阅读:
    密码加密
    注册视图
    session会话
    验证码功能
    使用Django表单替代html表单
    实现登陆视图功能
    设计登陆需求页面
    配置视图
    配置数据库
    npm 学习
  • 原文地址:https://www.cnblogs.com/fangyuandoit/p/13713807.html
Copyright © 2020-2023  润新知