作者jinn (阿昌)
看板java
标题[问题] 〈诚心发问〉请问「多个下载」是怎麽写的?
时间Mon Aug 10 09:12:35 2009
想请问各位大大像FlashGet、FireFox的下载那样「有一大堆连结准备下载,却维持同时
只下载三个东西」要怎麽写啊?新增执行绪吗?
这是我原本的想法:↓
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void method(String[] 网址 ){
...
for(int i=0; i <= 网址[].length ; i++){
String DD = 网址[i];
while(true){
if(Thread.activeCount() <= 3 ){
//执行绪是否小於三个
Thread t = new Thread(new 下载(DD) );
//新增执行绪
t.start();
break;
}
}
}
}
class 下载 implements Runnable {
下载(String D){...} //建构子
public void run(){...} //方法run()
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
只是这样写的话,while回圈一直执行判断"执行绪有几个"好像会很耗资源。
还是其实那些下载软体是几个网址连结就新增几个执行绪,让系统依负荷自己挑选要执行
哪几个的?
可不可以请各位大大们解说一下概念~ 谢谢m(_ _)m
ps.JavaWorld是不是倒了@@?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.165.194.94
1F:→ kuninaka:写个物件 继承Thread吧 里面用一个Class Var.记录下载量 08/10 09:38
2F:推 kuninaka:阿 跟你的想法一样XD 08/10 09:39
3F:→ kuninaka:用listen的方式吧 当下载完成的时候呼叫callback 08/10 09:41
4F:推 qrtt1:flashget 有印出他使用的 http 指令 :D 08/10 09:46
5F:推 pao0111:有个简单的方法,使用生产者与消费者样式可限制执行绪数量 08/10 11:11
6F:→ pao0111:生产者与消费者间隔一个BlockingQueue,用来queue下载任务 08/10 11:14
7F:→ pao0111:生产者塞下载任务到queue,n个消费者从queue取任务来处理 08/10 11:18
8F:→ pao0111:还没处理的下载都在queue里,n为多少就是同时下载几个罗~ 08/10 11:21
9F:→ jinn:谢谢各位大大精辟的分析,我会努力思考学习的xd 08/10 19:30
10F:→ jinn:顺便问一下,BlockingQueue有许多子类别,用哪种比较好啊@@? 08/10 19:33
11F:推 pao0111:就这case而言,LinkedBlockingQueue是个很直觉的选择 ^^ 08/11 23:14
12F:推 adrianshum:直接利用 ThreadPoolExecutor 更简单易明了 08/12 10:41
13F:→ jinn:嗯嗯~谢谢大家的帮忙,让我发现许多明路,甘温XD 08/13 10:52