3.0、Java多线程——Java多线程实现图片同时下载
第一步:在pom.xml文件中导入相关依赖,如下:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
第二步:创建 TestThread.java 文件,代码如下:
package com.hkl.demo01;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
//练习Thread , 实现多相处同步下爱图片
public class TestThread2 extends Thread {
private String url; //网络图片地址
private String name; //保存的文件名
public TestThread2(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) {
TestThread2 t1 = new TestThread2("file:///D:\\图片\\鬼灭之刃1.jpg","鬼灭之刃1.jpg");
TestThread2 t2 = new TestThread2("file:///D:\\图片\\鬼灭之刃2.jpg","鬼灭之刃2.jpg");
TestThread2 t3 = new TestThread2("file:///D:\\图片\\鬼灭之刃3.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 (IOException e) {
e.printStackTrace();
System.out.println("ID异常,downLoader方法出现问题");
}
}
}
我这里是本地下载所以 url 前面加了一个file:/// 不然会报错,非本地下载更换 url 的路径即可
第三步:执行 main 主函数后可以看到后台输出 以及 图片下载的位置,如下所示
这里输出的结果表示在main函数执行后,这些线程有CPU去调度,我们无法人为的干涉,所以执行的顺序每一次可能都不一样。
由于线程间切换交替执行的速度很快(切换的时间单位为纳秒),所以看上去就和同步执行、同步下载的效果一样了