实现文件的java 文件断点下载载

热门搜索:
Sponsored links
09:40&&&&来自:&&&&&&浏览次数:0&&&&&&下载次数:0应用背景适合初学<font Color=red>linux系统编程的码奴。熟悉一<font Color=red>下UNIX编程环境,熟悉一<font Color=red>下UNIX的系统调用的行为&&&&&&&&&&&&&.涉及信号,进程间通信,及管道。&&&&&&&&&nbs... 03:57&&&&来自:&&&&&&浏览次数:16&&&&&&下载次数:0本程序主要实现任务的断点续传功能,首先新建一个<font Color=red>下载任务线程,获得<font Color=red>下载任务的大小,将一个大任务分为若干个等大的任务块(最后一块除外);其次再创建若干<font Color=red>下载线程(初始值为5),并按照线程是否闲置状态将任务块...11小时前&&&&来自:&&&&&&浏览次数:14&&&&&&下载次数:0FPGA中实现的硬件UDP 协议 FPGA中实现的硬件UDP 协议... 03:31&&&&来自:&&&&&&浏览次数:130&&&&&&下载次数:0* 此程序是免费软件 ;你可以将它重新分发和/或修改它
* 所发表的 GNU 通用公共许可的条款<font Color=red>下
* 自由软件基金会,版本 2 或任何更高版本。
* 重新分发和使用在源代码和二进制形式,或不
* 修改,允许只要符合以<font Color=red>下条件... 20:06&&&&来自:&&&&&&浏览次数:4&&&&&&下载次数:0多线程操作可以同时搜索多个根路径建立一个待搜索路径队列建立多个搜索线程每次取出一个待搜索路径枚举目录<font Color=red>下的文件和目录输出符合的文件把子目录插入待搜索路径目标:熟悉线程操作方式熟悉多线程数据保护熟悉多线程... 22:37&&&&来自:&&&&&&浏览次数:753&&&&&&下载次数:19这个是<font Color=red>linux<font Color=red>下多线程网络编程的源代码。实现ARM9视频采集和通过网络发送JPEG数据,使用UDP协议。自己写的,搞了好几天!<font Color=red>linux<font Color=red>下的多线程比较复杂,易出错。... 10:09&&&&来自:&&&&&&浏览次数:6&&&&&&下载次数:1<font Color=red>linux<font Color=red>下载工具MyGet目标设计成一个可扩展的,拥有丰富界面的多线程<font Color=red>下载工具,它支持HTTP、FTP、HTTPS、MMS、RTSP等协议。...13小时前&&&&来自:&&&&&&浏览次数:83&&&&&&下载次数:2<font Color=red>linux 0.01源码,其中包扩所有<font Color=red>linux 0.01版本源码文件,源码中对每个文件每条语句进行详细注释。... 02:04&&&&来自:&&&&&&浏览次数:34&&&&&&下载次数:0图片查看器:实现了基本功能,选择路径,上一张,<font Color=red>下一张,QTNUMLCD显示第几张,通过滑块或者按钮控制查看的第几张图片,<font Color=red>linux<font Color=red>下独自完成!
每一个qt程序都是一个文件夹!(即都必须创建一个目录)
1 mkdir dir
2 Cd dir...
热门关键词搜索
Sponsored links
23 篇源代码 21 篇源代码 18 篇源代码 13 篇源代码 9 篇源代码
285 篇源代码 173 篇源代码 48 篇源代码 42 篇源代码 36 篇源代码
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
CF仔没有找到您要的代码,请去留下您的问题吧,可能会有大神帮助你哦!
该用户暂时未开通博客
请按 Ctrl+D 键添加到收藏夹。其他回答(4)
否决的原因呢?
园豆:8509
园豆:8509
在服务器端需要一个发布系统支持。比如在上传时,要求上传一个zip包,其中有一个xml文件或json文件,描述了软件版本之类的信息。
园豆:2569
园豆:2569
文件被修改 写成一个服务 每次上续传前 读取一下,然后判断是否新传
园豆:10314
既然你负责客户端上传,为啥不直接在客户端把状态记录好呢?服务器,只需要知道true or false即可!
园豆:24470
&&&您需要以后才能回答,未注册用户请先。duandianxuchuan 实现断点续传,同 载,大的文件的下载项目很有帮助 过ASIHttp第三方代码 iPhone 238万源代码下载-
&文件名称: duandianxuchuan
& & & & &&]
&&所属分类:
&&开发工具: Objective-C
&&文件大小: 173 KB
&&上传时间:
&&下载次数: 8
&&提 供 者:
&详细说明:实现断点续传,同时下载,大的文件的下载项目很有帮助,通过ASIHttp第三方代码实现-HTTP download, at the same time
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&圭画浼&&............\.DS_Store&&............\._.DS_Store&&............\AFResumingDownload&&............\..................\.DS_Store&&............\..................\._.DS_Store&&............\..................\AFResumingDownload&&............\..................\AFResumingDownload.xcodeproj&&............\..................\............................\project.pbxproj&&............\..................\............................\project.xcworkspace&&............\..................\............................\...................\contents.xcworkspacedata&&............\..................\............................\...................\xcuserdata&&............\..................\............................\...................\..........\mac.xcuserdatad&&............\..................\............................\...................\..........\...............\UserInterfaceState.xcuserstate&&............\..................\............................\...................\..........\times.xcuserdatad&&............\..................\............................\...................\..........\.................\UserInterfaceState.xcuserstate&&............\..................\............................\...................\..........\xcoder.xcuserdatad&&............\..................\............................\...................\..........\..................\UserInterfaceState.xcuserstate&&............\..................\............................\xcuserdata&&............\..................\............................\..........\mac.xcuserdatad&&............\..................\............................\..........\...............\xcschemes&&............\..................\............................\..........\...............\.........\AFResumingDownload.xcscheme&&............\..................\............................\..........\...............\.........\xcschememanagement.plist&&............\..................\............................\..........\times.xcuserdatad&&............\..................\............................\..........\.................\xcschemes&&............\..................\............................\..........\.................\.........\AFResumingDownload.xcscheme&&............\..................\............................\..........\.................\.........\xcschememanagement.plist&&............\..................\............................\..........\xcoder.xcuserdatad&&............\..................\............................\..........\..................\xcdebugger&&............\..................\............................\..........\..................\..........\Breakpoints.xcbkptlist&&............\..................\............................\..........\..................\xcschemes&&............\..................\............................\..........\..................\.........\AFResumingDownload.xcscheme&&............\..................\............................\..........\..................\.........\xcschememanagement.plist&&............\..................\..................\AFDownloadRequestOperation.h&&............\..................\..................\AFDownloadRequestOperation.m&&............\..................\..................\AFHTTPClient.h&&............\..................\..................\AFHTTPClient.m&&............\..................\..................\AFHTTPRequestOperation.h&&............\..................\..................\AFHTTPRequestOperation.m&&............\..................\..................\AFImageRequestOperation.h&&............\..................\..................\AFImageRequestOperation.m&&............\..................\..................\AFJSONRequestOperation.h&&............\..................\..................\AFJSONRequestOperation.m&&............\..................\..................\AFNetworkActivityIndicatorManager.h&&............\..................\..................\AFNetworkActivityIndicatorManager.m&&............\..................\..................\AFNetworking.h&&............\..................\..................\AFPropertyListRequestOperation.h&&............\..................\..................\AFPropertyListRequestOperation.m&&............\..................\..................\AFResumingDownload-Info.plist&&............\..................\..................\AFResumingDownload-Prefix.pch&&............\..................\..................\AFURLConnectionOperation.h&&............\..................\..................\AFURLConnectionOperation.m&&............\..................\..................\AFXMLRequestOperation.h&&............\..................\..................\AFXMLRequestOperation.m&&............\..................\..................\AppDelegate.h&&............\..................\..................\AppDelegate.m&&............\..................\..................\AudioPlayer.h&&............\..................\..................\AudioPlayer.m&&............\..................\..................\AudioStreamer.h&&............\..................\..................\AudioStreamer.m&&............\..................\..................\CHANGES&&............\..................\..................\README.md&&............\..................\..................\UIImageView+AFNetworking.h&&............\..................\..................\UIImageView+AFNetworking.m&&............\..................\..................\ViewController.h&&............\..................\..................\ViewController.m&&............\..................\..................\ViewController.xib&&............\..................\..................\en.lproj&&............\..................\..................\........\InfoPlist.strings&&............\..................\..................\icon.png&&............\..................\..................\main.m
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 实现web左右分页,上下分页的效果.另有txt的阅读分页
&[] - 一个在ios上实现的火车余票查询的系统的,系统包括客户端代码和服务器代码,客户端在ios上运行,服务器可在pc上运行。
&[] - iphone,使用socket程序,服务器端。
&[] - 模仿IPHONE短信发送,聊天界面源代码
&[] - ios里面的数据库操作,利用core Data永久保存数据的操作,基本的插入,删除,增加,修改. core Data
&[] - 《iPhone开发基础教程》供ios编程学习者使用
&[] - 对于一些比较麻烦的uitableView,通过收缩列表可以充分利用屏幕的空间
&[] - iphone界面 Labview开发 非常华丽的界面
&[] - 人脸检测,可以检测到图片中人脸的位置,适用ios设备以多线程、断点续传方式下载文件的实现 - Java综合 - Java - ITeye论坛
以多线程、断点续传方式下载文件的实现
& 上一页 1
锁定老帖子
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
SavageGarden
来自: 北京
发表时间:&&
最后修改:
以多线程、断点续传方式下载文件,经常出现下载下来的文件大小和服务端一致,但是却无法正常打开的现象,搞了很久,贴下我的实现方式,请各位多多指教
1、将下载文件的处理放在自定义的线程类中,每下载一个文件就新启动一个下载线程。
2、在下载线程中完成对服务端的链接和身份认证,成功后开始下载文件。
3、新建n个子线程,根据下载文件的大小和线程数量得到每个子线程要下载的大小。
4、分别启动子线程,进行分段下载。
5、分段下载完成,合并临时文件。
6、合并文件完成,删除临时文件。
FTP下载线程类
package com.jfc.ftp.
import java.io.BufferedInputS
import java.io.BufferedOutputS
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.util.concurrent.locks.L
import java.util.concurrent.locks.ReentrantL
import com.jfc.ftp.service.FTPS
import com.jfc.ftp.util.C
import com.jfc.ftp.util.PropertyU
* 为断点续传下载文件而启动新的线程
* @author SavageGarden
public class FTPThread extends Thread{
* 站点端口
* 当前线程的FTP操作接口实现类
private FTPService ftpS
* 第几个下载项
private int rowI
* 要下载的文件路径
* 要下载的文件大小
* 要下载的文件保存路径
* 标记文件已下载量
public int hadRead = 0;
* 下载线程开始时间
public long startTime = 0;
* 下载线程结束时间
public long endTime = 0;
* 当前下载线程的互斥锁
public Lock ftpThreadL
* 当前下载线程的状态
private int status = Constant.THREAD_STATUS_NEW;
public synchronized int getStatus() {
public synchronized void setStatus(int status) {
this.status =
* 是否已经合并文件
private boolean hadMerger =
public synchronized boolean isHadMerger() {
return hadM
public synchronized void setHadMerger(boolean hadMerger) {
this.hadMerger = hadM
* 当前下载线程的状态
private int completed = 0;
public synchronized int getCompleted() {
public synchronized void setCompleted(int completed) {
* 下载线程个构造方法&br&
* 根据已经取得连接的FTPTools得到连接信息&br&
* 根据参数取得下载信息
* @param rowIndex
* @param filepath
* @param filesize
* @param savepath
public FTPThread(int rowIndex, String filepath, long filesize, String savepath) {
super("FTPThread");
host = FTPTools.
port = FTPTools.
user = FTPTools.
pswd = FTPTools.
this.rowIndex = rowI
this.filepath =
this.filesize =
this.savepath =
ftpThreadLock = new ReentrantLock();
setStatus(Constant.THREAD_STATUS_RUNNABLE);
public FTPThread(int rowIndex, String filepath, long filesize, String savepath, int status) {
super("FTPThread");
host = FTPTools.
port = FTPTools.
user = FTPTools.
pswd = FTPTools.
this.rowIndex = rowI
this.filepath =
this.filesize =
this.savepath =
ftpThreadLock = new ReentrantLock();
setStatus(status);
public void run() {
getFTPService();
getFTPConnect(host, port);
if(doLoginFTP(user, pswd)) {
ResumeBrokenTransferByThread(this, rowIndex, filepath, filesize, savepath);
* 获取FTPService接口实现类&br&
* 首先从配置文件中找&br&
* 如果没有则加载默认的实现类
* @throws InstantiationException
* @throws IllegalAccessException
* @throws ClassNotFoundException
public void getFTPService(){
ftpService = (FTPService)Class.forName(PropertyUtil.getProperty("ftp.service.name", FTPService.FTP_SERVICE_NAME)).newInstance();
} catch (Exception e) {
e.printStackTrace();
* 根据服务器地址、端口获得ftp链接
* @param host
* @param port
public String getFTPConnect(String host, int port) {
return ftpService.getFTPConnect(host, port);
* 执行登录
* @param user
* @param pswd
public boolean doLoginFTP(String user, String pswd) {
return ftpService.doLoginFTP(user, pswd);
* 以断点续传的方式下载文件
* @param rowIndex
* @param filepath
* @param filesize
* @param savepath
public void ResumeBrokenTransfer(int rowIndex, String filepath, int filesize, String savepath) {
ftpService.ResumeBrokenTransfer(rowIndex, filepath, filesize, savepath);
* 以多线程、断点续传的方式下载文件
* @param rowIndex
* @param filepath
* @param filesize
* @param savepath
public void ResumeBrokenTransferByThread(FTPThread ftpThread, int rowIndex, String filepath, long filesize, String savepath) {
ftpService.ResumeBrokenTransferByThread(ftpThread, rowIndex, filepath, filesize, savepath);
* 在指定文件路径下查找临时文件合并为一个文件
* @param filepath
* @param threadCount
public void mergerTempFile(String filepath, int threadCount) {
System.out.println("开始合并文件");
BufferedOutputStream data_output = new BufferedOutputStream(new FileOutputStream(filepath));
byte[] temp = new byte[Constant.TEMP_BYTE_LENGTH];
for(int i = 0; i & threadC i ++) {
File tempFile = new File(filepath + Constant.DOWNLOAD_TEMP_NAME + i);
BufferedInputStream data_input = new BufferedInputStream(new FileInputStream(tempFile));
int read = 0;
int hadRead = 0;
while((read = data_input.read(temp, 0, temp.length)) != -1) {
data_output.write(temp, 0, read);
hadRead +=
data_input.close();
data_output.close();
} catch (Exception e) {
e.printStackTrace();
setHadMerger(true);
System.out.println("合并文件完成");
deleteTempFile(filepath, threadCount);
* 合并文件完成后删除临时文件
* @param filepath
* @param threadCount
public void deleteTempFile(String filepath, int threadCount) {
if(isHadMerger()) {
for(int i = 0; i & threadC i ++) {
File tempFile = new File(filepath + Constant.DOWNLOAD_TEMP_NAME + i);
tempFile.delete();
FTP接口实现类中的ResumeBrokenTransferByThread方法
* 使用多线程、断点续传方式下载文件&br&
* 首先查找要保存的路径下有无缓存文件(以.wfml为后缀)&br&
不存在 重新开始下载&br&
* 重新开始下载&br&
读取配置文件要分多少个线程来下载文件&br&
按照文件大小、线程数量来分配每个线程要下载的文件大小、文件名&br&
开始断点续传下载&br&
* 继续下载&br&
开始断点续传下载&br&
* @param rowIndex
* @param filepath
* @param filesize
* @param savepath
public void ResumeBrokenTransferByThread(final FTPThread ftpThread, final int rowIndex, final String filepath, final long filesize, final String savepath) {
final String filename = filepath.substring(filepath.lastIndexOf("/") + 1, filepath.length());
final byte[] temp = new byte[Constant.TEMP_BYTE_LENGTH];
//得到要创建的线程数量
final int threadCount = Integer.parseInt(PropertyUtil.getProperty(Constant.RESUME_THREAD_COUNT_PROPNAME, Constant.RESUME_THREAD_COUNT_DEFAULT));
final String[] downloadSizeArray = SystemTools.getDownloadSizeArray(filesize, threadCount);
for(int i = 0; i & threadC i ++) {
File temp_file = new File(savepath + File.separator + filename + Constant.DOWNLOAD_TEMP_NAME + i);
System.out.println("文件" + i + "大小为:" + temp_file.length());
ftpThread.hadRead += temp_file.length();
System.out.println("ftpThread.hadRead : " + ftpThread.hadRead);
for(int i = 0; i & threadC i ++) {
final int index =
Thread resumeThread = new Thread(){
//当前线程的缓存文件
File tempFile = new File(savepath + File.separator + filename + Constant.DOWNLOAD_TEMP_NAME + index);
public void run() {
SocketFTPService socketFTPService = new SocketFTPService();
socketFTPService.getFTPConnect(host, port);
if(socketFTPService.doLoginFTP(user, pswd)) {
int read = 0;
int hadRead = 0;
//当前线程要下载的文件大小
String downsize = downloadSizeArray[index].split(":")[1];
//当前线程要下载的文件起始点
String skipsize = downloadSizeArray[index].split(":")[0];
//将hadRead(已读文件大小)置为缓存文件的大小
hadRead = (int)tempFile.length();
//设定文件指针(下载位置)
//socketFTPService.doFTPCommand("REST " + (Integer.parseInt(skipsize) + temp_file.length()));
//readRespond();
socketFTPService.dataSocket = socketFTPService.getDataSocket();
socketFTPService.doFTPCommand("RETR " + filepath);
BufferedInputStream data_input = new BufferedInputStream(socketFTPService.dataSocket.getInputStream());
RandomAccessFile raf = new RandomAccessFile(tempFile, "rw");
//跳过当前线程要下载的文件起始点和缓存文件大小之和
data_input.skip(Integer.parseInt(skipsize) + hadRead);
raf.seek(hadRead);
System.out.println("线程" + index + "已下载 " + hadRead);
if(ftpThread.startTime == 0) {
ftpThread.startTime = System.currentTimeMillis();
SystemTools.addObserver();
while(hadRead & Integer.parseInt(downsize)) {
if(ftpThread.getStatus() == Constant.THREAD_STATUS_RUNNABLE) {
while((read = data_input.read(temp, 0, temp.length)) != -1) {
int temp_hadRead = hadR
if((temp_hadRead += read) & Integer.parseInt(downsize)) {
read = Integer.parseInt(downsize) - hadR
raf.write(temp, 0, read);
hadRead +=
ftpThread.ftpThreadLock.lock();
ftpThread.hadRead +=
} finally {
ftpThread.ftpThreadLock.unlock();
SystemTools.getCurrentSpeed(rowIndex, ftpThread.startTime, ftpThread.hadRead);
SystemTools.getPrice(rowIndex, ftpThread.hadRead, filesize);
SwingUtilities.invokeLater(SystemTools.updateProgressBarRunnable);
System.out.println("第" + index + "个线程完成下载" + hadRead + ",完成下载" + ftpThread.hadRead);
raf.close();
if(hadRead == tempFile.length()) {
ftpThread.setCompleted(ftpThread.getCompleted() + 1);
System.out.println(ftpThread.getCompleted());
if(ftpThread.getCompleted() == threadCount && ftpThread.hadRead == filesize) {
ftpThread.endTime = System.currentTimeMillis();
SystemTools.getFinalSpeed(rowIndex, ftpThread.startTime, ftpThread.endTime, filesize);
ftpThread.mergerTempFile(savepath + File.separator + filename, threadCount);
} catch(Exception e) {
e.printStackTrace();
resumeThread.start();
欢迎拍砖!
等级: 初级会员
来自: 北京
发表时间:&&
没耐心看完代码个人感觉问题应该出现在这几个地方,一是从网络读取的数据是否真实度到了本地;二是文件合并的时候是否数据真的写入了合并后的文件中。确保BufferedOutputStream中的数据已经处理干净了确保RandomAccessFile的读取数据正确一般遇到这样中问题就是使用debug模式跑一边,如果最终合并之后的文件数据的byte数组中,出现连续的000000,肯定是数据没有读过来导致的
请登录后投票
等级: 初级会员
来自: 艾泽拉斯
发表时间:&&
我想看FtpService
请登录后投票
积分: 1399
来自: 杭州
发表时间:&&
&& 我也指几个问题吧:1. 滥用的synchronized 2. 不能确保关闭的文件流(如果出现异常,就无法关闭文件流)3. 方法名首字母大写,一看楼主就是做.net转做java的。4. 基本无效的异常处理。5. 因为异常而导致的线程泄漏。6. 子线程还没有执行完,主线程就会退出,这样子线程就丝毫没有任何管理。&& 这样的程序学习做sample用是可以的,不过离真正的应用还有蛮大的距离。
请登录后投票
ipconfiger
等级: 初级会员
来自: 成都
发表时间:&&
==================================================3. 方法名首字母大写,一看楼主就是做.net转做java的。==================================================真是很精屁啊
请登录后投票
等级: 初级会员
来自: 北京
发表时间:&&
方法名首字母一定要大写么& 我看 什么equals。。。valueOf&& 不也是小写么
请登录后投票
积分: 1399
来自: 杭州
发表时间:&&
我是指出楼主的问题,不是说方法首字母要大写。
请登录后投票
等级: 初级会员
来自: 北京
发表时间:&&
貌似.net方面的方法名是大写开头,而java方面方法名首字母小写,常量全大写!
请登录后投票
SavageGarden
来自: 北京
发表时间:&&
最后修改:
首先非常感谢大家的关注!其次,
“个人感觉问题应该出现在这几个地方,一是从网络读取的数据是否真实度到了本地;二是文件合并的时候是否数据真的写入了合并后的文件中。确保BufferedOutputStream中的数据已经处理干净了确保RandomAccessFile的读取数据正确”
一针见血!偶尔会出现下载下来的文件无法打开或报文件已损坏,一直以为是线程方面的问题,感谢指点解决问题的方向!
“我想看FtpService”
第二段代码即为FtpService实现类中的ResumeBrokenTransferByThread方法
“1. 滥用的synchronized
其实是还不会用。。。2. 不能确保关闭的文件流(如果出现异常,就无法关闭文件流)
其实是还没有做异常处理。。。3. 方法名首字母大写,一看楼主就是做.net转做java的。
其它的都小写的,唯独贴出来的这个大写了是因为“ResumeBrokenTransfer”这个词是从网上搜来了,自己不知道“断点续传”咋翻译,也就没改成小写,不过我确实没有碰过.net。。。4. 基本无效的异常处理。
同25. 因为异常而导致的线程泄漏。
线程泄露?请不吝指教,多谢!6. 子线程还没有执行完,主线程就会退出,这样子线程就丝毫没有任何管理。
子线程还没有执行完,主线程就会退出?测试时从来没有发生过,请问您怎么得出的这个结论?
这样的程序学习做sample用是可以的,不过离真正的应用还有蛮大的距离。
确实是第一次写这种程序,感谢您的指教,谢谢!
再次感谢大家的关注和指教,谢谢!
请登录后投票
积分: 1399
来自: 杭州
发表时间:&&
引用
1. 滥用的synchronized
&&&& 其实是还不会用。。。
&&& 其实对于你的类中setter/getter方法大多不需要使用这个关键字;而对于线程回收以及状态判断时就有可能需要。这里面的问题比较复杂,不是一下子可以说清的。
引用
2. 不能确保关闭的文件流(如果出现异常,就无法关闭文件流)
&&&& 其实是还没有做异常处理。。。
&&& 其实不管异常是否处理,一定要确保流能被正确关闭,所以应该放在finally,而不是正确执行的后面。
引用
3. 方法名首字母大写,一看楼主就是做.net转做java的。
&&&& 其它的都小写的,唯独贴出来的这个大写了是因为“ResumeBrokenTransfer”这个词是从网上搜来了,自己不知道“断点续传”咋翻译,也就没改成小写,不过我确实没有碰过.net。。。
&&& 这倒是我误解了,只是因为我有做.net的同事经常有这种习惯,呵呵。
引用
4. 基本无效的异常处理。
&&& 同2
&&& 多线程程序中异常处理是其健壮性的重要保证,所以一定要重视。
引用
5. 因为异常而导致的线程泄漏。
&&& 线程泄露?请不吝指教,多谢!
&&& 对于你for循环中的线程来说,因为你前面如果出现异常,就有可能导致该线程无法正确地处理信息,同时相对应的资源没有被关闭,从而出现问题。
引用6. 子线程还没有执行完,主线程就会退出,这样子线程就丝毫没有任何管理。
&&& 子线程还没有执行完,主线程就会退出?测试时从来没有发生过,请问您怎么得出的这个结论?
&&& 因为你的主程序执行完方法ResumeBrokenTransferByThread就已经结束了,而在方法ResumeBrokenTransferByThread中是启动另外的线程去下载文件。而这些线程已经脱离了你程序的管理。你根本就无法控制它们(比如停止等等,错误恢复等等)。对于多线程程序是一定要设计一个控制线程的。
引用 确实是第一次写这种程序,感谢您的指教,谢谢!
&&&& 第一次已经很不错了,其实很值得鼓励,多写几次,多尝试,就会有经验了。
请登录后投票
& 上一页 1
跳转论坛:移动开发技术
Web前端技术
Java企业应用
编程语言技术}

我要回帖

更多关于 java 文件断点下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信