[問題] 〈誠心發問〉請問「多個下載」是怎麼寫的?

看板java作者 (阿昌)時間14年前 (2009/08/10 09:12), 編輯推噓5(508)
留言13則, 5人參與, 最新討論串1/1
想請問各位大大像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

08/10 09:38, , 1F
寫個物件 繼承Thread吧 裡面用一個Class Var.記錄下載量
08/10 09:38, 1F

08/10 09:39, , 2F
阿 跟你的想法一樣XD
08/10 09:39, 2F

08/10 09:41, , 3F
用listen的方式吧 當下載完成的時候呼叫callback
08/10 09:41, 3F

08/10 09:46, , 4F
flashget 有印出他使用的 http 指令 :D
08/10 09:46, 4F

08/10 11:11, , 5F
有個簡單的方法,使用生產者與消費者樣式可限制執行緒數量
08/10 11:11, 5F

08/10 11:14, , 6F
生產者與消費者間隔一個BlockingQueue,用來queue下載任務
08/10 11:14, 6F

08/10 11:18, , 7F
生產者塞下載任務到queue,n個消費者從queue取任務來處理
08/10 11:18, 7F

08/10 11:21, , 8F
還沒處理的下載都在queue裡,n為多少就是同時下載幾個囉~
08/10 11:21, 8F

08/10 19:30, , 9F
謝謝各位大大精闢的分析,我會努力思考學習的xd
08/10 19:30, 9F

08/10 19:33, , 10F
順便問一下,BlockingQueue有許多子類別,用哪種比較好啊@@?
08/10 19:33, 10F

08/11 23:14, , 11F
就這case而言,LinkedBlockingQueue是個很直覺的選擇 ^^
08/11 23:14, 11F

08/12 10:41, , 12F
直接利用 ThreadPoolExecutor 更簡單易明瞭
08/12 10:41, 12F

08/13 10:52, , 13F
嗯嗯~謝謝大家的幫忙,讓我發現許多明路,甘溫XD
08/13 10:52, 13F
文章代碼(AID): #1AVtG4lo (java)