java多线程

Nvidia Jetson AGX Orin 如何进入 Recovery Mode(刷机注意事项) Jetson Orin 如何进入Recovery mode + 刷机注意事项 阅读详情

优化:

合理利用服务器资源,将资源利用最大化,加快下载速度

一般有两种方式:

线程池里面有N个线程,多线程下载单个文件,将网络路径的文件流切割成多快,每个线程下载一小部分,然后写入到文件里面,组成一个文件 当有很多个文件需要下载的时候,调用某个方法,有个线程池,线程池大小假定是10,当有10个文件过来的时候,每个线程去下载一个文件即可

线程是进程中的一个独立控制单元,线程在控制着进程的执行,一个进程中至少有一个线程。多线程可以更好地利用cpu的资源,线程之

间还能进行数据共享。在Java中,一个线程是指进程中的一个执行流程,一个进程可以运行多个线程,Java中每个线程都有一个调用栈,

即使不在程序中创建任何新的线程,也有一个main()方法运行在一个线程内,称为主线程,一旦创建一个新的线程,就产生一个新的调用

栈。通过该专题课程的系统学习,让大家一次性搞明白Java中的多线程。

源码:

0准备

线程下载需要的数据建立对应的属性(开始位置,结束位置,线程数,并创建构造函数)

//多线程下载需要的信息
private long startIndex;
private long endIndex;
private int threadId;
public DownLoad2(long startIndex, long endIndex, int threadId) {
   super();
   this.startIndex = startIndex;
   this.endIndex = endIndex;
   this.threadId = threadId;
}

具体的run方法中:

1通过URL和下载资源建立联系

//统一资源管理器,可以直接打开网络地址
URL url = new URL(DownLoadTest2.path);
//因为是基于Http请求,获取httpUrlConnection,获取网络连接对象,和服务器建立联系
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
​

2设置参数,读取的范围

//设置参数
conn.setRequestMethod("GET");
conn.setConnectTimeout(50000);//连接超时
conn.setReadTimeout(50000);//读取超时
conn.addRequestProperty("Range", "bytes="+startIndex+"-"+endIndex);//设置读取范围

3开始进行文件的读取和写入(保护文件读取时的判断(是否读取成功))

if(conn.getResponseCode()==206) {//部分数据ok
    //取出连接中的数据
    InputStream is = conn.getInputStream();
    //提供一个接收的地方(本地接收)
    File file = new File("D:\\upload\\MSangoSetup2.0.0.80.zip");
    //输出流,开始写数据,随机读写流
    RandomAccessFile raf = new RandomAccessFile(file, "rwd");
    raf.seek(startIndex);//跳转到线程开始的位置
    
    //具体的读写操作
    byte [] buf= new byte[8192];//字节数组,提高读取速度
    int len=0;//字节数组读取的长度
    while((len=is.read(buf))!=-1) {
        raf.write(buf, 0, len);
    }
    raf.close();
    is.close();
    //线程完成下载,完成下载线程数加一
    DownLoadTest2.okThread++;
    //同步代码块,线程下载数量和总线程数量一致时,完成下载线程数量归零
    synchronized (DownLoadTest2.path) {
        System.out.println("线程:"+this.getName()+threadId+"下载完毕...   "+DownLoadTest2.okThread);
        if(DownLoadTest2.okThread==DownLoadTest2.countThread) {
            DownLoadTest2.okThread=0;
        }
    }
}

多线下载测试类

准备

static String path = "http://download2.m3guo.com/MSangoSetup1.2.22.51.exe";//资源地址
static int countThread=14;//线程数
static int okThread=0;//和线程数有关,记录线程完成的个数

main方法内容

1通过URL和下载资源建立联系

//统一资源管理器,可以直接打开网络地址
URL url = new URL(DownLoadTest2.path);
//因为是基于Http请求,获取httpUrlConnection,获取网络连接对象,和服务器建立联系
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

2设置参数

//设置参数
conn.setRequestMethod("GET");
conn.setConnectTimeout(50000);//连接超时
conn.setReadTimeout(50000);//读取超时

3判断资源链接是否建立成功,成功进行多线程下载分配

        if(conn.getResponseCode()==200) {//成功
            //获取文件总长度
            long count = conn.getContentLengthLong();
            //每个线程下载的大小
            long size = count/countThread;
            //开启线程进行下载
            for (int i = 0; i < countThread; i++) {
                long startIndex=size*i;//开始位置     0         102.4
                long endIndex=size*(i+1);//结束位置   102.4     204.8
                DownLoad2 thread = new DownLoad2(startIndex,endIndex , i);
                thread.start();
            }
        }
(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行 阅读详情

相关推荐

最新测算源码PHP算命源码-风水八字-八字起名-塔罗牌占卜

未来,随着技术的发展和用户需求的变化,我们可以继续对系统进行升级和优化,以满足更多用户的需求和期望。数据库设计:创建一个名为bazi的数据库表,包含以下字段:id(自增ID)、name(姓名)、sex(性别)、birth_date(出生日期)、birth_time(出生时间)、bazi(八字结果)。数据库设计:创建一个包含塔罗牌信息的数据库表,如tarot_cards,包含字段:id(塔罗牌ID)、name(塔罗牌名称)、meaning(塔罗牌含义)等。根据操作系统的不同,PHP的安装方法会有所不同。

shanbeizi的博客 2420

多线程下载

多线程下载 使用多线程下载文件可以很快地完成文件的下载,比如迅雷就是采用了多线程的方式来实现快速下载的。之所以采用多线程的形式会加快下载速度,是因为客户端启动多个线程进行下载时服务器就会为该客户端提供相应的服务,自然客户端就拥有了较快的下载速度。实际上并不是客户端并发的下载线程越多,程序下载速度就越快,,因为当客户端开启太多的并发线程之后,应用程序需要维护每条线程的开销,线程同步的开销,这些开销反...

哈 3505

工业相机图像格式深度解析:从Mono8到Mono12的选型与应用

本文深度解析工业相机黑白图像格式,重点对比Mono8、Mono10与Mono12的核心差异。文章从位深、动态范围和数据量等关键概念切入,详细阐述了不同格式的优缺点及适用场景,为工业视觉项目中的相机选型提供实战指南,帮助用户在精度、速度与成本间做出最优决策。

weixin_29207439的博客 262

【Golang】多线程下载器的实现

多线程下载,顾名思义就是对一个文件进行切片访问,等待所有的文件下载完成后在本地进行拼接成一个整体文件的过程。因此可以利用 golang 的多协程对每个分片同步下载,之后再合并且进行md5校验或者总长度校验。

luyoung0001@gmail.com的博客 1945

Verilog实现FIR滤波器

1、FIR滤波器简介 不追究FIR滤波器的深层含义,我们只关注如何实现;可以看出,FIR滤波器的本质就是延迟、系数相乘与求和,如下图: 2、设计 基于以上分析,按照三级流水实现FIR滤波器设计:信号延迟-系数相乘-求和 `timescale 1ns / 1ps module fir( input clk, input rst_n, input [3:0]din, output reg [9:0]dout ); // data reg reg [3:0]din1; reg [3:.

CLL_caicai的博客 1万+

外向交货单批次赋值的标准姿势:用 BAPI_OUTB_DELIVERY_CHANGE 把 LIPS-CHARG 改得稳、改得干净

摘要: 外向交货单批次赋值涉及严格的业务约束,包括批次管理状态、单据状态、拆分规则等,直接更新表 LIPS 不可取。推荐使用 BAPI_OUTB_DELIVERY_CHANGE 接口,通过标准业务逻辑实现批次修改。关键点包括:区分单批次分配与批次拆分场景,正确设置 ITEM_CONTROL 控制结构,并确保单位/数量数据完整。附可直接执行的ABAP代码示例,实现安全可靠的批次更新流程。 (字数:149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 397

如何开启Chrome和Edge的多线程下载功能(Parallel downloading)

众所周知,当我们想要在网上下载一个东西时那下载速度简直比我奶奶走路还要慢。许多朋友为了加快下载速度会喜欢去用IDM这种工具。但是,有一种更简便的方法:那就是开启浏览器的多线程下载,之后你会被那感人的速度给经惊艳到。

weixin_66899911的博客 8万+

SPI为什么不需要加上拉电阻

大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。

记得诚 2629

浏览器打开多线程下载教程,加快下载速度,让你的下载速度有质的飞跃

话不多说,我们开始教程。

2302_80946742的博客 6156

北斗导航 | 卡尔曼滤波与因子图优化对比(附图优化matlab代码)

- 历史数据利用:因子图通过滑动窗口保留历史状态,优化时联合多帧数据;卡尔曼滤波仅依赖当前和上一帧状态 。 - 迭代优化:因子图通过多次迭代逼近最优解,卡尔曼滤波仅单次更新 。 - 误差抑制:因子图的多次线性化可有效抑制非线性误差(如GNSS伪距观测的非线性) 。

尘世冰封的专栏 1303

城市仿真软件:AnyLogic_(8).行人与人群动态仿真

定义行人个体的行为和属性,如行走速度、目标位置等。// 创建一个行人// 设置行走速度为1.5 m/s// 设置目标位置为入口// 创建另一个行人// 设置行走速度为1.2 m/s// 设置目标位置为出口// 创建行人// 创建乘客行人与人群动态仿真在城市规划、交通管理和紧急疏散等领域具有广泛的应用。通过AnyLogic提供的行人模型模块,可以有效地模拟行人的个体行为、群体动态和与环境的交互。

kkchenjj的博客 1250

【亲测免费】 多线程下载利器:Multi-threadedDownload

多线程下载利器:Multi-threadedDownload 在数字时代,快速、高效地下载文件是许多人日常操作的一部分。今天,我们要向您推荐一款开源项目——Multi-threadedDownload,这是一个利用多线程技术提升下载速度的工具。无论是开发者还是普通用户,都能从中受益。 项目简介 Multi-threadedDownload 是一个基于Java语言实现的多线程下载器,它将大文件分成...

gitblog_00073的博客 532

c++中,部署Ethercat IGH + PREEMPT_RT 环境,跑DC模式,如何实现?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1358

Java多线程详解(一)Java多线程入门

最近听很多面试的小伙伴说,网上往往是一篇一篇的Java多线程的文章,除了书籍没有什么学习多线程的一系列文章。但是仅仅凭借一两篇文章很难对多线程有系统的学习,而且面试的时候多线程这方面的知识往往也是考察的重点,所以考虑之下决定写一系列关于Java多线程的文章。文章参考了高老师的《Java多线程编程核心技术》。力争使用最短的篇幅把Java多线程的知识作以系统的讲述。 本节思维导图: 思维导图...

刘成 2475

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【Java多线程】Java多线程技能

到 1. 进程和多线程的概念及线程的优点 提到多线程这个技术就不得不提及“进程”这个概念,在“百度百科”中对进程的解释如下: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 进程是受操作系统管理的基本运行单元。 那什么是线程呢? 线程可以理解成是在

一定要站在自己热爱的生活里闪闪发光 4万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java技术——Java多线程学习

0.前言 转载请标明出处:http://blog.youkuaiyun.com/seu_calvin/article/details/52400927 学习多线程之前需要先了解以下几个概念。 进程:一般指一个程序运行时的实例,每个进程有自己独立的地址空间。一个进程无法直接访问另一个进程的数据。 线程:是CPU调度的最小单元,一个进程可以有很多线程,每条线程可以并行执行不同的任务。并且每个线程有独立的运...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java 多线程详解

多线程(Multithreading)是指在一个程序中同时执行多个线程的能力。线程是进程中的一个执行路径,多线程允许程序在同一时间内执行多个操作。Java 中的多线程可以通过并发处理来提高程序的性能和响应速度,尤其在处理复杂计算、大量 I/O 操作或并发任务时非常有用。多线程使得程序可以同时执行多个任务,充分利用CPU资源,提升程序性能,增强响应性,并简化程序的复杂度。尽管多线程编程带来了一些挑战,如线程安全和死锁问题,但合理设计和使用多线程可以显著改善程序的整体表现。

goTsHgo的博客 2040

Java多线程

Java多进程,多线程编程,如何创建线程,线程启动中断等待,了解各种线程状态,线程安全以及如何解决线程安全问题,锁的作用,以及如何加锁,了解死锁怎么出现,如何解决死锁问题

Coding经历 1424

java多线程是什么_Java多线程是什么

本篇文章将介绍一下多线程和其实例。Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程 序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线 程来运行。一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单的Hello...

weixin_33050129的博客 378

Java多线程详解

线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

坏蛋阿土的博客 6819

JAVA多线程是什么

一、 什么是多线程: 我们现在所使用操作系统都是多任务操作系统(早期使用的DOS操作系统为单任务操作系统),多任务操作指在同一时刻可以同时做多件事(可以同时执行多个程序)。 多进程:每个程序都是一个进程,在操作系统中可以同时执行多个程序,多进程的目的是为了有效的使用CPU资源,每开一个进程系统要为该进程分配相关的系统资源(内存资源) 多线程:线程是进程内部比进程更小的执行单元(执行流|程序片段),每个线程完成一个任务,每个进程内部包含了多个线程每个线程做自己的事情,在进程中的所有线程共享该进程的资源; 主

qq_45022104的博客 4446

java多线程应用_Java多线程的应用总结

多线程的好处:在java中通常每一个任务称为一个线程,但是多线程实现一个程序同时执行多个任务。直接了当的说多线程可以把任务分块执行,分块后可以同时进行而不用等待。 如下载文件,浏览网站时加载图片,通过多线程就可以实现多文件下载,一下做好几个工作,这样效率更高,线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实...

weixin_31081671的博客 774

[java多线程][java] java多线程拼接字符串

前言: 看到一个java多线程拼接字符串的题,所以就来写一下。 题目描述 Java多线程 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 设计三个线程,三个线程并行执行,要求分别在控制台输入数据后面拼接"_A","_B","_C",并且需要保证线程1,线程2,线程3按顺序执行,即线程1执行完成后,再执...

qq_39397165的博客 1370
上一篇: Java基础
下一篇: Java封装简化(只有登录查询)
变成秃头怪
博客等级 码龄5年 47粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值