利用多线程下载图片

package day20_javaIO_Demo;
/**
 * 多线程下载图片
 */
import java.io.File;
import java.io.IOException;
import java.net.URL;

import org.apache.commons.io.FileUtils;
public class WebThread_demo extends Thread{
	private String url ; //图片下载地址
	private String name ;//保存的文件名称
	public WebThread_demo(String url,String name) {
		// TODO Auto-generated constructor stub
		this.url = url;
		this.name = name ;
	}
	//下载图片线程执行体
	@Override
	public void run() {
		// TODO Auto-generated method stub
		WebDownloader webDownloader = new WebDownloader();
		webDownloader.download(url, name);
		System.out.println("下载文件名为"+name);
	}
	public static void main(String[] args) {
		//url是从百度找的
		String url1 = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2F201306%2F21%2F220728m5zcr5ecr7cqq7bw.jpg&refer=http%3A%2F%2Fattach.bbs.miui.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625226464&t=34866c26fbaccd1de5a5235616a4150e";
		String url2 = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fb.zol-img.com.cn%2Fdesk%2Fbizhi%2Fstart%2F1%2F1349382370406.jpg&refer=http%3A%2F%2Fb.zol-img.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625226464&t=5ae6a18daac59d41a0511f4c83ea2fd8";
		String url3 ="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fattach.bbs.miui.com%2Fforum%2F201308%2F23%2F144350zazrmibjc212v201.jpg&refer=http%3A%2F%2Fattach.bbs.miui.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1625226464&t=f849494a85d81ec8ed6d85490ab88573";
		WebThread_demo demo1 = new WebThread_demo (url1, "1.jpg");
		WebThread_demo demo2 = new WebThread_demo (url2, "2.jpg");
		WebThread_demo demo3 = new WebThread_demo (url3, "3.jpg");
		demo1.start();
		demo2.start();
		demo3.start();
	}
	
}
//下载器
class WebDownloader{
	public void download(String url,String name) {
		try {
			FileUtils.copyURLToFile(new URL(url), new File(name));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("方法出现问题");
		}
	}
}

commons.io包下载路径:

https://commons.apache.org/proper/commons-io/download_io.cgi

百度网盘分享地址为:

链接:https://pan.baidu.com/s/1XTuOSSlWZ3AljJT8HSNNiQ 
提取码:wyjs 
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,可以使用多线程下载URL图片,可以利用线程池来管理和调度多个线程的执行。 线程池是一种用于执行和管理线程的软件设计模式。它可以在需要时创建线程,并在完成任务后重新利用这些线程,以避免频繁地创建和销毁线程带来的开销。Python提供了ThreadPoolExecutor类来实现线程池功能。 使用线程池进行URL图片下载的步骤如下: 1. 导入必要的模块和类: ```python import urllib.request from concurrent.futures import ThreadPoolExecutor ``` 2. 创建一个名为download_image的函数,用于下载URL图片: ```python def download_image(url): urllib.request.urlretrieve(url, "image.jpg") ``` 3. 创建一个ThreadPoolExecutor对象,并设置线程池的大小,例如设置为5: ```python thread_pool = ThreadPoolExecutor(max_workers=5) ``` 4. 创建一个URL列表,包含要下载图片链接: ```python url_list = ["https://example.com/image1.jpg", "https://example.com/image2.jpg", "https://example.com/image3.jpg"] ``` 5. 使用线程池的map函数来调度下载任务,将下载函数和URL列表作为参数传入: ```python thread_pool.map(download_image, url_list) ``` 通过以上几个步骤,就可以利用线程池并发地下载URL图片线程池中的线程会自动并发执行下载任务,提高了下载效率。最终,下载图片会保存在当前目录下的image.jpg文件中。 需要注意的是,使用线程池下载图片时,由于网络带宽和URL的响应速度等因素限制,实际下载速度可能不会线性增加,但相比单线程下载多线程下载可以更好地利用CPU和网络资源,提高下载效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值