技术标签: java
创建类继承Thread类
重写run()方法
package com.downLoad;
import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
public class DownLoad extends Thread{
private int startIndex;//线程开始下载位置
private int endIndex;//线程结束下载位置
private int threadId;//线程编号
public DownLoad(int startIndex, int endIndex, int threadId) {
this.startIndex = startIndex;
this.endIndex = endIndex;
this.threadId = threadId;
}
@Override
public void run() {
try {
//统一资源管理器 ,可以直接打开 网络地址
URL url = new URL(DownLoadTest.path);
//因为基于http请求 , 获取HttpURLConnection , 获取网络链接对象 ,就可以和服务器建立链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置一些参数
conn.setRequestMethod("GET"); //get请求
conn.setConnectTimeout(5000); //链接超时
conn.setReadTimeout(5000); //读取超时
conn.setRequestProperty("Range","bytes="+startIndex+"-"+endIndex);//设置 范围 请求参数 , 获取 线程下载范围
if(conn.getResponseCode()==206){
//部分数据 ok
//取出 链接中的 数据
InputStream is = conn.getInputStream(); //存储的是服务器上面 百度客户端数据
//提供一个接收地方(本地接收)
File file = new File("BaiduNetdisk_6.9.7.4.exe");
//输出流 ,开始写数据 ,随机读写 流
RandomAccessFile raf = new RandomAccessFile(file,"rwd");
raf.seek(startIndex); //跳转到 每个线程 开始读取的位置
System.out.println("线程:"+threadId+" 开始的位置:"+startIndex+"---"+" 结束位置"+endIndex);
int len = 0;
byte[] buf = new byte[1024];
while((len=is.read(buf))!=-1){
raf.write(buf,0,len);
}
System.out.println("线程:"+threadId+"下载完毕...");
raf.close();
DownLoadTest.finishedThread++;
//如果所有线程都下载完毕 ,让finishedThread 为0
synchronized (DownLoadTest.path){
DownLoadTest.finishedThread=0;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
创建多线程测试类
package com.downLoad;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* 多线程测试类
*/
public class DownLoadTest {
static String path = "http://softforspeed.51xiazai.cn/down/BaiduNetdisk_6.9.7.4.exe";
static int threadCount = 3; //3个线程
static int finishedThread = 0; //和 线程数 有关 ,记录每一个线程是否执行完毕
public static void main(String[] args) throws Exception {
//统一资源管理器 ,可以直接打开 网络地址
URL url = new URL(DownLoadTest.path);
//因为基于http请求 , 获取HttpURLConnection , 获取网络链接对象 ,就可以和服务器建立链接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置一些参数
conn.setRequestMethod("GET"); //get请求
conn.setConnectTimeout(5000); //链接超时
conn.setReadTimeout(5000); //读取超时
if(conn.getResponseCode()==200){
//1. 拿到 文件总长 (总大小)
int contentLength = conn.getContentLength();
//2. 每个线程下载的大小
int size = contentLength/threadCount;
//3.开启线程执行下载
for (int i = 0; i < threadCount; i++) {
int startIndex = i*size; // (i从0开始 )
int endIndex = (i+1)*size; //结束位置
DownLoad thread = new DownLoad(startIndex,endIndex,i);
thread.start();
}
}
}
}
执行结果:
一、题目介绍给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。示例:输入: 1/ \2 3\ 5输出: ["1->2->5", "1->3"]解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3来源:力扣(LeetCode)链接:https://l...
升序(asc)降序(desc)//年龄进行升序排序 (默认升序排列)select *from t_user order by age;select *from t_user order by age asc;+----+-----------+-----+--------+---------+| id | name | age | gender | content |+----+----..._通用的排序语句
目录keystoneglancenovaneutroncinderswiftkeystone1、域 domain查看域的信息列表openstack domain list创建一个新域,名为“yun”openstack domain create yun查看新域的详细信息openstack domain show yun删除新域,需更改域中“enable”为“disable”openstack domain set --disable yunopenstack domain delete_openstack 查看创建的用户
封装行为,不只是状态 系统理论中,处理巨大、复杂的系统结构时,包容是最有用的构造之一。软件行业中,包容或封装的价值已深入人心。程序语言的结构,如子程序、函数、模块、类等都支持包容了。 模块和包代表了大尺度的封装,而类、子程序和函数代表了更细粒度的。这些年来,我发现类看起来像是程序员最难正确应用的封装。一个有着3000行代码的主方法的类,或者仅有其原始属性的set_智能体的封装
第四课 Go容器化微服务系统实战-链路追踪观望台tags:GO慕课网categories:链路追踪jaeger数据库外键数据库事务文章目录第四课 Go容器化微服务系统实战-链路追踪观望台第一节 链路追踪简介1.1 链路追踪jaeger基本介绍1.2 jaeger-术语**Span**1.3 jaeger的调用过程1.4 jaeger的组件1.5 jaeger安装和常用端口第二节 商品模块开发2.1 商品模块目录建立2.2 商品模块代码proto开发2.3 商品模块domain的m
yolov3目标实时监测,实时识别。可对人物,动物,自行车等多种目标实时识别。运行环境: python+cv2+jupyter notebook+Keras可直接运行:代码下载地址:https://download.csdn.net/download/weixin_44754046/11200480..._yolov3预测怎么改成摄像头输入
原文地址:http://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/ org.apache.maven.plugins maven-assembly-plugin 2.4.1 jar-with-dependenc
问题原因: eclipse中的maven插件默认没有引用环境变量,所以找不到jdk的路径,也就找不到tool.jar。解决办法:步骤如下:1.关闭eclips2.在eclipse的解压目录中与eclipse启动图标相同的文件夹下找到eclipse.ini文件,在该文件的-vmargs上面加上-vmC:\Program Files\Java\jdk1.7.0_79\jre\...
2019独角兽企业重金招聘Python工程师标准>>> ..._cmake dll qt debug模式
为什么80%的码农都做不了架构师?>>> ...
通常高效沉淀池的表面负荷取值范围为1.0-3.0m³/(㎡*h),若是计算当前正运行的高效沉淀池的表面负荷流量/沉淀池表面积=表面负荷若是从设计角度考虑需要综合工艺流程,污水性状,沉淀速度,沉淀区污泥容积,排泥量,排泥频率等参数进行设计。高效沉淀池的表面负荷,国内手册与国外的标准相差很大,国内都在1.5左右,而国外都在0.6-0.8之间,我比较倾向国外的,不过问题是表面负荷低,土建的费用就高!斜管..._高效沉淀池表面负荷
1.登录界面1.1登录主界面1.2用户注册界面1.3修改密码界面_qt 无人机地面站系统 导航模块