使用Callable实现多线程的代码
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();
}
}