java程序设计mooc攻略
import java.net.URL;
import java.io.*;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Downloader {
static long timeCost;
public static void main(String[] args)
throws Exception {
final URL[] urls = {
new URL("https://www.pku.edu.cn"),
new URL("https://www.baidu.com"),
new URL("https://www.sina.com.cn"),
new URL("https://www.dstang.com")
};
final String[] files = {
"pku.htm",
"baidu.htm",
"sina.htm",
"study.htm",
};
long start = new Date().getTime(); //开始时间
ExecutorService exe = Executors.newFixedThreadPool(urls.length); //创建线程池
for (int idx = 0; idx < urls.length; idx++) {
try {
System.out.println(urls[idx]);
final int index = idx;
exe.execute(new Thread(() -> { //创建新的线程并加入线程池
try {
download(urls[index], files[index]);
} catch (IOException e) {
e.printStackTrace();
}
}));
} catch (Exception ex) {
ex.printStackTrace();
}
}
exe.shutdown(); //等待全部线程执行完毕之后关闭线程池
while (true) {
if (exe.isTerminated()) { //如果线程池关闭了,计算所用的时间
long end = new Date().getTime();
System.out.println("It costs " + (end - start) + " ms.");
break;
}
}
}
static void download(URL url, String file)
throws IOException {
System.out.println("downloading from " + url.toString());
try (InputStream input = url.openStream();
OutputStream output = new FileOutputStream(file)) {
byte[] data = new byte[1024];
int length;
while ((length = input.read(data)) != -1) {
output.write(data, 0, length);
}
}
}
}