多线程下载网络资源

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

相关文章

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

2. 下载rknn-toolkit2项目

官网链接: https://github.com/airockchip/rknn-toolkit2 安装好git:[[1. Git的安装]] 下载项目: git clone https://github.com/airockchip/rknn-toolkit2.git 或者直接去github下载压缩文件,解压即可。

多线程解析报表

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。 Way1 join import java.time.LocalTime;public class Main {public static void main(String[] args) thro

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

Java 多线程的基本方式

Java 多线程的基本方式 基础实现两种方式: 通过实现Callable 接口方式(可得到返回值):

前端form表单+ifarme方式实现大文件下载

// main.jsimport Vue from 'vue';import App from './App.vue';import { downloadTokenFile } from '@/path/to/your/function'; // 替换为您的函数路径// 将 downloadTokenFile 添加到 Vue 原型上Vue.prototype.$downloadTokenF

JAVA- 多线程

一,多线程的概念 1.并行与并发 并行:多个任务在同一时刻在cpu 上同时执行并发:多个任务在同一时刻在cpu 上交替执行 2.进程与线程 进程:就是操作系统中正在运行的一个应用程序。所以进程也就是“正在进行的程序”。(Windows系统中,我们可以在任务管理器中看 到进程) 线程:是程序运行的基本执行单元。当操作系统执行一个程序时, 会在系统中建立一个进程,该进程必须至少建立一个线

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

多线程篇(阻塞队列- LinkedBlockingDeque)(持续更新迭代)

目录 一、LinkedBlockingDeque是什么 二、核心属性详解 三、核心方法详解 addFirst(E e) offerFirst(E e) putFirst(E e) removeFirst() pollFirst() takeFirst() 其他 四、总结 一、LinkedBlockingDeque是什么 首先queue是一种数据结构,一个集合中

Tomcat下载压缩包解压后应有如下文件结构

1、bin:存放启动和关闭Tomcat的命令的路径。 2、conf:存放Tomcat的配置,所有的Tomcat的配置都在该路径下设置。 3、lib:存放Tomcat服务器的核心类库(JAR文件),如果需要扩展Tomcat功能,也可将第三方类库复制到该路径下。 4、logs:这是一个空路径,该路径用于保存Tomcat每次运行后产生的日志。 5、temp:保存Web应用运行过程中生成的临时文件