zoukankan      html  css  js  c++  java
  • java多线程 Callable 接口 实现图片下载

    编写代码

    package com.xiang.lesson06;
    
    import org.apache.commons.io.FileUtils;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URL;
    import java.util.concurrent.*;
    
    // 实现Callable  接口;
    public class TestCallable implements Callable {
    
        private String url; //网络图片地址
        private String name;//保存的文件名
    
        public TestCallable(String url, String name) {
            this.name = name;
            this.url = url;
    
        }
        @Override
        public Boolean call() throws Exception {
            WebDownloader downloader = new WebDownloader();
            downloader.downloader(url,name);
            System.out.println("下载了文件名:"+name);
            return true;
        }
    
    
        public static void main(String[] args) throws Exception {
            TestCallable t1 = new TestCallable("https://img-home.csdnimg.cn/images/20210907093842.jpg","t1.jpg");
            TestCallable t2 = new TestCallable("https://img-blog.csdnimg.cn/234ef937b8924d0a81271085511f6223.png","t2.jpg");
            TestCallable t3 = new TestCallable("https://img-blog.csdnimg.cn/img_convert/baf51d796db22a6a03c0ce7caf378f6f.png","t3.jpg");
    
    //创建执行服务
            ExecutorService pool = Executors.newFixedThreadPool(3);
    //        提交执行
            Future s1 = pool.submit(t1);
            Future s2 = pool.submit(t2);
            Future s3 = pool.submit(t3);
    //        获取结果
            Object o1 = s1.get();
            Object o2 = s2.get();
            Object o3 = s3.get();
    //        关闭服务
            pool.shutdownNow();
    
        }
    }
    
    
    class WebDownloader {
        //    下载方法
        public void downloader(String url, String name) {
            try {
    //             copyURLToFile 把网页地址,变成一个文件;
                FileUtils.copyURLToFile(new URL(url), new File(name));
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("IO异常,downloader方法出现问题");
            }
        }
    }
    

    运行结果

  • 相关阅读:
    增量式爬虫 Scrapy-Rredis 详解及案例
    scrapy-redis使用以及剖析
    为什么代码要写到匿名自执行函数中?
    Vue组件第三天--webpack
    Vue组价通信
    Vue组件第一天
    pip3 install pycryptohome
    selenium 安装与 chromedriver安装
    解决:'chromedriver' executable needs to be in PATH问题
    如何在VS Code中编写Python
  • 原文地址:https://www.cnblogs.com/d534/p/15239882.html
Copyright © 2011-2022 走看看