freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于java多線程的下載器源碼剖析(參考版)

2025-06-26 15:46本頁(yè)面
  

【正文】 以及如何對(duì)多個(gè)下載進(jìn)行管理、調(diào)度以及內(nèi)存的管理。函數(shù)之所以定義為static,是因?yàn)槲覀儫o(wú)法通過建立類對(duì)象來調(diào)用類的方法,只能通過類名稱來調(diào)用該方法,因此必須設(shè)定為static類型。 }downloader。Downloader(new=null)if(downloader Downloader public然后再通過一個(gè)public函數(shù)得到該Downloader的實(shí)例[java]=Downloader private而為了能夠得到一個(gè)實(shí)例,我們?cè)谠擃愔卸x了一個(gè)靜態(tài)變量[java] }start()。 config。 super()。 config) private因此我們將構(gòu)造函數(shù)定義為private[java]六. 單例模式Downloader 代表整個(gè)下載系統(tǒng),整個(gè)系統(tǒng)中只有一個(gè)實(shí)例對(duì)象,因此我們需要保證系統(tǒng)中只有一個(gè)實(shí)例對(duì)象。對(duì)優(yōu)先級(jí)編號(hào),每個(gè)優(yōu)先級(jí)的隊(duì)列都可以通過插隊(duì)首或加隊(duì)尾的方式添加任務(wù)?! 『笈_(tái)任務(wù),不緊急的或預(yù)備給用戶使用的。這是最高優(yōu)先級(jí)的,而且隨著用戶新操作的出現(xiàn),新任務(wù)賦予更高優(yōu)先級(jí)。這里如何動(dòng)態(tài)調(diào)整最大連接數(shù),通過技術(shù)手段探知網(wǎng)絡(luò)狀況,從而智能調(diào)整,應(yīng)該是一個(gè)很好的研究方向?! ∷?,通過測(cè)試我們會(huì)通過在不同網(wǎng)絡(luò)環(huán)境下測(cè)試,得到最大連接數(shù)的參考值。爭(zhēng)搶能力與網(wǎng)絡(luò)連接數(shù)  一般來講網(wǎng)絡(luò)連接數(shù)越多,整體爭(zhēng)搶到的資源越多,但不是絕對(duì)的線性正比關(guān)系的,而且增多到一定程度后網(wǎng)絡(luò)質(zhì)量下降。我們希望的體驗(yàn)是,如下圖所示,用戶在瀏覽網(wǎng)頁(yè),已有圖片1和圖片2已經(jīng)或正在下載,然后迅速滾屏到最下的過程中,下載任務(wù)的優(yōu)先級(jí)不斷調(diào)整,最終如圖所示數(shù)字,用戶所看到的網(wǎng)頁(yè)區(qū)域最高優(yōu)先級(jí)下載。如下圖所示,用戶瀏覽該網(wǎng)頁(yè),迅速滾屏到最下。五.總結(jié):上面的代碼演示了一個(gè)簡(jiǎn)單的內(nèi)管管理模塊。 }().putDownloadBlock(block)。 : for(DownloadBlock而當(dāng)整個(gè)文件都下載完畢之后,需要把當(dāng)前Download的所有緩存歸還給系統(tǒng)(Downloader)[java]view plainHYPERLINK copy當(dāng)當(dāng)前的DownloadBlock使用DownloadThread下載完畢之后,他所擁有的這個(gè)DownloadBlock會(huì)交給其所在的Download,以供剩余新建的DownloadBlock使用。上面的代碼中,首先會(huì)從當(dāng)前Download所擁有的Cache中獲取DownloadBlock,如果有空閑的DownloadBlock,則直接取出。 }block。} (this)。 ().getDownloadBlock()。block =0)if(() DownloadBlock longgetDownloadBlock(long public返回一個(gè)創(chuàng)建好的block塊。 *block塊需要下載的長(zhǎng)度paramstart *cache中的block都是已經(jīng)下載完畢的。cache獲取一塊DownloadBlock。 * /**[java]而整個(gè)的系統(tǒng)Downloader也會(huì)有一個(gè)大的ConcurrentLinkedQueueDownloadBlock blockCache。即我們使用緩存來對(duì)已經(jīng)申請(qǐng)的內(nèi)存重復(fù)利用。收藏657人閱讀基于Java多線程的下載器源碼剖析(三)分類:下一節(jié),我們會(huì)重點(diǎn)講解一下Downloader如何系統(tǒng)中的緩存進(jìn)行處理的。而Download自身會(huì)通過切分文件創(chuàng)建出多個(gè)DownloadBlock。寫到這里,整個(gè)的系統(tǒng)框架目錄就非常清晰了:Downloader, DownloadDemen, Download 之間是通過DownloadBlock聯(lián)系起來的。 }()。getDownloadBlock(){ publicview plainHYPERLINK copy }()。 ()。}download= if(()downs){for(Downloaddown= null。 ==||if(downs==downs=getDownloadBlock(){ privateview plainHYPERLINK copy} ().removeDownloadBlock(block)。 DownloadThread(block))。+fordownload(Create !== while(true){view plainHYPERLINK copy其意思是將當(dāng)前的切分出來的Block放入到待下載隊(duì)列中去。 addDownloadBlock(getDownloadBlock(start,上面的代碼,我們?cè)诘谝黄幸呀?jīng)講解過了,這里我們會(huì)重點(diǎn)看[java] }blockAutogenerated// e)catchblockAutogenerated// e)catchblockAutogenerated// e)catch blockCache){blockdownloaderbackinall(this Byte/sspeedAverage\nms++:Total\n()(Complete length/(total/1000)。speed begin。()total ()。 ()。 the// } checkSpeed()。 (1000)。 ||toall(Waiting blocksfor// 60*1000,blockCounts,SplitBlockTask(this,=splittaskminuteeverynewthatset1000,()10,newcheckSpeedTask check)。for(Set 1speedthatset addDownloadBlock(getDownloadBlock(start, size。len=1)()if(i len。*=int =for(int blocks)。()(Add initial// /=int +=withRandomAccessFile((),=RandomAccessFile ())。(Create create length)。size=+downloadlength// ()。begin try voidview plainHYPERLINK copyOK,我們看看,Download是切分文件時(shí)是如何與整個(gè)系統(tǒng)聯(lián)系在一起。 Download線程所做的事情就是把當(dāng)前的文件根據(jù)線程數(shù)目進(jìn)行切分。這段代碼做了兩件事情: }(download)。new addDownl
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1