zoukankan      html  css  js  c++  java
  • 多线程--future模式初体验

    第一次使用多线程,虽然理解的不是很透彻,但是也值得记录下。用的是future模式。


    创建个线程池:
    private ExecutorService cachedThreadPool = Executors.newFixedThreadPool(200,new SiyueThreadFactory("test_task"));

    创建任务列表futureTaskList
    taskList是业务内容,它的长度是线程数,也是循环次数。
    List<Future<Map<String,Object>>> futureTaskList = Lists.newArrayListWithCapacity(taskList.size());
    for(String task : taskList) {
    futureTaskList.add(cachedThreadPool.submit(new Callable<Map<String,Object>>(){
    @Override
    public Map<String,Object> call() throws Exception {
    //task相关业务
    ...
    return map;
    }
    }));
    }

    等待返回结果,用future.get()获取结果。
    List<Map<String,Object>> AllDataList = new ArrayList<>();
    for(Future<Map<String,Object>> future : futureTaskList){
    try {
    AllDataList.add(future.get());
    } catch (ExecutionException | InterruptedException e) {
    e.printStackTrace();
    }
    }

    关闭线程池
    try {
    // 通知
    cachedThreadPool.shutdown();

    // (所有的任务都结束的时候,返回TRUE)
    if(!cachedThreadPool.awaitTermination(awaitTime, TimeUnit.MILLISECONDS)){
    // 超时的时候向线程池中所有的线程发出中断(interrupted)。
    cachedThreadPool.shutdownNow();
    }
    } catch (InterruptedException e) {
    // awaitTermination方法被中断的时候也中止线程池中全部的线程的执行。
    System.out.println("awaitTermination interrupted: " + e);
    cachedThreadPool.shutdownNow();
    }
  • 相关阅读:
    Python杂记
    设置Python打印格式
    SFTP和FTS协议的区别
    C#6.0语法糖剖析(一)
    .NET Framework 4.0之Tuple(元组)
    以Self Host的方式来寄宿Web API
    以Web Host的方式来寄宿Web API
    IIS在默认情况并不支持对PUT和DELETE请求的支持
    ASP.NET Web API 特性
    在Windows下编写并运行第一个ASP.NET 5 Preview Web API程序
  • 原文地址:https://www.cnblogs.com/tuituji27/p/11309026.html
Copyright © 2011-2022 走看看