zoukankan      html  css  js  c++  java
  • 图片下载的两种方式Thread和Callable

    图片下载

    //练习Thread,实现多线程同步下载图片
    public class ThreadTest2 extends Thread{
        private String url;
        private String name;
    
        public ThreadTest2(String url,String name){
            this.url=url;//路径
            this.name=name;//名字
        }
        //下载图片的执行体
        @Override
        public void run() {
            WebDownloader webDownloader=new WebDownloader();
            webDownloader.downloader(url,name);
            System.out.println("下载了文件名为:"+name);
        }
    
        public static void main(String[] args) {
            ThreadTest2 t1=new ThreadTest2("https://img2020.cnblogs.com/blog/2186812/202012/2186812-20201228112126269-922198589.jpg","1.jpg");
            ThreadTest2 t2=new ThreadTest2("https://img2020.cnblogs.com/blog/2186812/202012/2186812-20201228112131743-1242968120.jpg","2.jpg");
            ThreadTest2 t3=new ThreadTest2("https://img2020.cnblogs.com/blog/2186812/202012/2186812-20201228112139931-180392048.jpg","3.jpg");
            t1.start();
            t2.start();
            t3.start();
        }
    }
    //下载器
    class WebDownloader{
        //下载方法
        public void downloader(String url,String name){
            try {
                FileUtils.copyURLToFile(new URL(url), new File(name));
            }catch (Exception e){
                e.printStackTrace();
                System.out.println("IO异常");
            }
        }
    

    Callable

    //创建TestCallable类并继承Callable
    public class TestCallable implements Callable<Boolean> {
        private String url;//图片路径
        private String name;//图片名字
    
        public TestCallable(String url,String name){
            this.url=url;
            this.name=name;
        }
        //下载图片的执行体
        @Override
        public Boolean call() {
            WebDownloader webDownloader=new WebDownloader();
            webDownloader.downloader(url,name);
            System.out.println("下载了文件名为:"+name);
            return true;
        }
        public static void main(String[] args) throws Exception{
            TestCallable t1=new TestCallable("https://img2020.cnblogs.com/blog/2186812/202012/2186812-20201228112126269-922198589.jpg","1.jpg");
            TestCallable t2=new TestCallable("https://img2020.cnblogs.com/blog/2186812/202012/2186812-20201228112131743-1242968120.jpg","2.jpg");
            TestCallable t3=new TestCallable("https://img2020.cnblogs.com/blog/2186812/202012/2186812-20201228112139931-180392048.jpg","3.jpg");		
            //开启执行服务		      new一个线程池
            ExecutorService es= Executors.newFixedThreadPool(3);//3代表3个线程
            //提交执行-------t1 t2 t3表示创建的对象
            Future<Boolean> f1=es.submit(t1);
            Future<Boolean> f2=es.submit(t2);
            Future<Boolean> f3=es.submit(t3);
            //获取结果
            boolean b1=f1.get();
            boolean b2=f2.get();
            boolean b3=f3.get();
            //关闭服务
            es.shutdownNow();
       }
    }
    //下载器
    class WebDownloader{
        //下载方法
        public void downloader(String url,String name){
            try {
                FileUtils.copyURLToFile(new URL(url), new File(name));
            }catch (Exception e){
                e.printStackTrace();
                System.out.println("IO异常");
            }
        }
    }
    
  • 相关阅读:
    Java基础——java中String、StringBuffer、StringBuilder的区别
    Java基础——深入剖析Java中的装箱和拆箱
    Java内存分配全面浅析
    基于Appium的移动端UI自动化测试
    测试比对工具,辅助型QA转型之路
    读懂了腾讯和阿里的区别,就读懂了中国商业的秘密!
    Python中的基础数据类型(List,Tuple,Dict)及其常用用法简析
    阿里妈妈技术质量再度重磅开源:国内首个智能化功能测试开源平台Markov
    卧槽,极客时间今天专栏课程突然免费,啥情况?
    Flask 与 Django 先学哪个呢
  • 原文地址:https://www.cnblogs.com/lhy8116/p/14205111.html
Copyright © 2011-2022 走看看