欢迎光临散文网 会员登陆 & 注册

使用Callable实现多线程的代码

2020-04-07 10:00 作者:小垃圾kiki  | 我要投稿
package cn.jd.thread;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.io.FileUtils;

/*
 * 下载图片
 */
public class WebDownloader {
    
    //下载的工具
    public void download(String url,String name) {
        try {
            FileUtils.copyURLToFile(new URL(url), new File(name));
        } catch (MalformedURLException e) {
            e.printStackTrace();
            System.out.println("不合法的url");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("图片下载失败了");
        }
    }

}

package cn.jd.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class CDownloader implements Callable<Boolean> {
    private String url;// 远程路径
    private String name;// 存储名字

    public CDownloader(String url, String name) {
        this.url = url;
        this.name = name;
    }

    @Override
    public Boolean call() throws Exception {
        WebDownloader wd = new WebDownloader();
        wd.download(url, name);
        System.out.println(name);
        return true;
    }

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        CDownloader cd1 = new CDownloader("http://www.technosamrat.com/wp-content/uploads/2012/02/Ocean-Wallpapers-Images1.jpg", "1.jpg");
        CDownloader cd2 = new CDownloader("http://pics.sc.chinaz.com/files/pic/pic9/201509/apic14546.jpg", "2.jpg");
        CDownloader cd3 = new CDownloader("https://pic1.zhimg.com/v2-3b4fc7e3a1195a081d0259246c38debc_1200x500.jpg","3.jpg");
        //创建执行任务
        ExecutorService ser=Executors.newFixedThreadPool(3);
        //把任务提交执行
        Future<Boolean> result1=ser.submit(cd1);
        Future<Boolean> result2=ser.submit(cd2);
        Future<Boolean> result3=ser.submit(cd3);
        //获取结果
        boolean r1=result1.get();
        boolean r2=result2.get();
        boolean r3=result3.get();
        //关闭服务
        ser.shutdownNow();
        
    }

}

使用Callable实现多线程的代码的评论 (共 条)

分享到微博请遵守国家法律