求助,RandomAccessFile会让多线程分段下载失去效果?

来源:百度知道 编辑:UC知道 时间:2024/09/22 03:43:55
下面代码我做一个简单模拟多线程分段下载。用了RandomAccessFile类,原本想多线程同时下载即变成单线程独占cpu,直到某一分侧面下载线程运行完 或者我在run()内明确调用yield()线程让步,其它分段下载的时间才有机会运行。真奇怪
这样岂不是失去了多线程分段下载意义了?好像RandomAccessFile类使线程同步了
感觉变成单线程下载了
你试下在程序运行其间中断。然后把//if(true) return 注释去掉,读下C:\\text.text 文件的首5个long值,是5个值依次自+到10000的,如(0,10000,4568,10000,0) 如果线程让步,中途打断程序,再读文件,是同时5个值自加,如(3027,2931,2931,2955,2955)
有答案我再追加分啊,谢谢
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class ManyThreadAdd {

static long[] longs=new long[5]; //模拟记录分段下载,,记录每段的断点位置
public static void main(String[] args) throws InterruptedException, IOException {
long t1=System.currentTimeMillis();
ThreadGroup g=new ThreadGroup("g1");
RandomAccessFile rw=new RandomAccessFile(new File("C:\\text.text"), "rw");
rw.seek(0);
for(int i=0;i<longs.length;i++){
Sy

不懂啊,关注一下,帮你顶吧。。。

多线程下载,用RandomAccessFile类是正解。
思路:
1.确定线程个数:n 作为参数。
2.得出文件大小,将文件均分为n分,记下分割点。(让各线程同步完成)
3.分n各线程读取文件,以(文件开始位置+文件流)的形式传输。
4.接收流的位置,接受流,按位置写文件!