多线程下载网络资源

2024-09-07 14:36

本文主要是介绍多线程下载网络资源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

示例:模拟通过5个线程下载10个网络图片

import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;public class MultiThreadDownloader {private static final int THREAD_POOL_SIZE = 5;//线程池大小private List<String> networkResources = new ArrayList<>();//模拟10个网络资源private static final String downloadPath = "E:/Tmp";//下载目录public void download() throws IOException, ExecutionException, InterruptedException {//记录开始时间LocalDateTime currentTime = LocalDateTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String startTime = currentTime.format(formatter);System.out.println("下载开始时间:" + startTime);List<String> executeResult = new ArrayList<>();//创建线程池,多线程下载ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE);for(String resource:networkResources) {Future<String> future = executorService.submit(new Callable<String>() {@Overridepublic String call() throws Exception {String fileNameSuffix = resource.substring(resource.lastIndexOf("/") + 1);String fileName = downloadPath + File.separator + fileNameSuffix;//文件名和下载地址保持一致File file = new File(fileName);OutputStream outputStream = null;URL url = null;URLConnection urlConnection = null;InputStream inputStream = null;try {outputStream = new FileOutputStream(file);url = new URL(resource);urlConnection = url.openConnection();inputStream = urlConnection.getInputStream();byte[] bytes = new byte[1024];int len = 0;while ((len = inputStream.read()) != -1) {outputStream.write(bytes,0,len);}} catch (FileNotFoundException | MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if(outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}executeResult.add("success");return "success";}});//future.get();//等待线程执行结果}executorService.shutdown();System.out.println(executeResult);//记录结束时间currentTime = LocalDateTime.now();String endTime = currentTime.format(formatter);System.out.println("下载结束时间:" + endTime);}public void initDownLoadTask() {networkResources.add("https://pics5.baidu.com/feed/7aec54e736d12f2e20ef4daf3258436c87356844.jpeg");networkResources.add("https://pics7.baidu.com/feed/0ff41bd5ad6eddc42349d0dd474120f353663396.jpeg");networkResources.add("https://pics5.baidu.com/feed/d53f8794a4c27d1e50c0a932080c3b60dfc4384d.jpeg");networkResources.add("https://pics5.baidu.com/feed/95eef01f3a292df5559aa4dab3c0ca6e36a873a7.jpeg");networkResources.add("https://pic.rmb.bdstatic.com/bjh/news/21bf5f01d0fc4d31e1c49167f92ee023.jpeg");networkResources.add("https://pic.rmb.bdstatic.com/bjh/news/4a11f9b43570c2ef89ea4f0c61c8fb19.jpeg");networkResources.add("https://pics5.baidu.com/feed/e4dde71190ef76c675521117d99b6bf4ae5167a2.png");networkResources.add("https://pics5.baidu.com/feed/342ac65c10385343dae1dbe2d19e2670cb808866.jpeg");networkResources.add("https://pics1.baidu.com/feed/64380cd7912397dd1b012247d50d24b9d1a28793.jpeg");networkResources.add("https://pics7.baidu.com/feed/95eef01f3a292df531693cbf37beca6e35a87314.jpeg");}public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {MultiThreadDownloader downloader = new MultiThreadDownloader();downloader.initDownLoadTask();downloader.download();}
}

这篇关于多线程下载网络资源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145333

相关文章

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

使用国内镜像源优化pip install下载的方法步骤

《使用国内镜像源优化pipinstall下载的方法步骤》在Python开发中,pip是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可... 目录引言1. 为什么需要国内镜像源?2. 常用的国内镜像源3. 临时使用国内镜像源4. 永久配置国内镜

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

Python如何快速下载依赖

《Python如何快速下载依赖》本文介绍了四种在Python中快速下载依赖的方法,包括使用国内镜像源、开启pip并发下载功能、使用pipreqs批量下载项目依赖以及使用conda管理依赖,通过这些方法... 目录python快速下载依赖1. 使用国内镜像源临时使用镜像源永久配置镜像源2. 使用 pip 的并

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

python 3.8 的anaconda下载方法

《python3.8的anaconda下载方法》本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介... 目录python3.8 版本的 Anaconda 下载与安装指南一、Anaconda 简介二、下载 An

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2