JAVA多线程下载问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 07:33:36
package com.sam.net.download;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.swing.JTextArea;

public class DownloadThread extends Thread {
URL url;
long startPos;
long endPos;
boolean done = false;
boolean isstop = false;
RandomAccessFile file = null;
InputStream stream = null;
String filename;
String savaAs;
Search search;
long writePos;

public DownloadThread(URL url, String saveAs, long startPos,long endPos,Search search) throws IOException {
this.url = url;
this.startPos = startPos;
this.endPos = endPos;
this.savaAs = saveAs;
this.search = search;
search.downloaded = 1;
}

一般来讲。我会使用
synchronized(this){
this.wait();
}

synchronized(this){
this.notify();
}

################################################
当然停不下来啦。。你的整个读取活动都是在while之内做的,也就是你整个读取活动都没有做完一次循环。。。

##################################################
看好了。。是这样的~~~

你不是实例化线程对象是这样的嘛
DownloadThread aaa = new DownloadThread();
然后直接调用aaa.stop()就可以了。。。

不过。。。一般并发程序的执行是这样的。。。一开始确实是每个线程都打开inputstream。。。但是呢。。run()里面应该是这样的

while( 执行标志 == true ){
读取指定长度的数据流
}

然后对于一个boolean的“执行标志”字段。。弄getter和setter方法作为启动和暂停的标志。。。主线程每次分配指定部分的内容给新线程执行,然后停止。新线程报告执行情况再判断是否继续

这样做是有个原因。。就是java线程是用户级的线程库。。所以有可能因为一个线程而阻塞整个进程。。所以你必须实时记录执行情况。。一旦从错误中恢复,可以从最近的地方开始重新下载。。