Java实现多线程的方式有多种,本文利用多线程下载网络图片的小程序的方式简单介绍用继承Thread类,重写run的方法实现Java多线程。
1. 因为需要用到Apache Commons IO来下载保存图片,所以需在Maven项目的pom.xml文件中加入Apache Commons IO依赖。
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
2. 创建一个ThreadLoader类并继承Thread类,并定义url,filename和构造函数。
public class ThreadDownloader extends Thread {
private String url;
private String filename;
public ThreadDownloader(String url, String filename) {
this.url = url;
this.filename = filenam;
}
}
3. 创建下载类,并编写下载方法。
public void download(String url, String filename) {
try {
FileUtils.copyURLToFile(new URL(url), new File(filename));
} catch (IOException e) {
System.out.println("IO异常!图片下载失败!");
e.printStackTrace();
}
}
4. 重写run方法。
@Override
public void run() {
Downloader dl = new Downloader();
dl.download(url, filename);
System.out.println("下载文件名为:" + filename);
}
5. 编写main函数,使用start()方法启动进程。
public static void main(String[] args) {
ThreadDownloader td1 = new ThreadDownloader("https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/3/15/170ddd5352bb1d9e~tplv-t2oaga2asx-image.image", "1.jpg");
ThreadDownloader td2 = new ThreadDownloader("https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/3/15/170ddd480bc06073~tplv-t2oaga2asx-image.image", "2.jpg");
ThreadDownloader td3 = new ThreadDownloader("https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/3/15/170ddde9b2eaeb49~tplv-t2oaga2asx-image.image", "3.jpg");
td1.start();
td2.start();
td3.start();
}
6. 运行程序可发现,图片正常下载但每次下载顺序均不相同。