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

正文內(nèi)容

java多線程與線程安全實(shí)踐基于 ttp協(xié)議的斷點(diǎn)續(xù)傳—免費(fèi)畢業(yè)設(shè)計(jì)論文-文庫吧

2024-11-09 11:28 本頁面


【正文】 .............................. 25 第 1 頁 共 25 頁 1 引言 課題的研究背景與意義 課題的研究背景 以往我們開發(fā) 的程序大多是單線程的,即一個(gè)程序只有一條從頭至尾的執(zhí)行線索。然而現(xiàn)實(shí)世界中的很多過程都具有多條線索同時(shí)動(dòng)作的特性。例如,我們可以一邊看電視,一邊活動(dòng)胳膊,如果不容許這樣做,我們會(huì)感覺很難受。再如一個(gè)網(wǎng)絡(luò)服務(wù)器可能需要同時(shí)處理多個(gè)客戶機(jī)的請求等。 Java 語言的一大特性就是內(nèi)置對多線程的支持。多線程是指同時(shí)存在幾個(gè)執(zhí)行體,按幾條不同的執(zhí)行線索共同工作的情況,它使得編程人員可以很方便地開發(fā)出具有多線程功能、能同時(shí)處理多個(gè)任務(wù)的功能強(qiáng)大的應(yīng)用程序。雖然執(zhí)行線程給人一種幾個(gè)事件同時(shí)發(fā)生的感覺,但這只是一種錯(cuò)覺,因?yàn)?我們的計(jì)算機(jī)在任何給定的時(shí)刻只能執(zhí)行那些線程中的一個(gè)。為了建立這些線程正在同步執(zhí)行的感覺。 Java 快速地把控制從一個(gè)線程切換到另一個(gè)線程。 多個(gè)線程的執(zhí)行是并發(fā)的,也就是在邏輯上 “同時(shí) ”,而不管是否是物理上的 “同時(shí) ”。如果系統(tǒng)只有一個(gè) CPU,那么真正的 “同時(shí) ”是不可能的,但是由于CPU 的速度非???,用戶感覺不到其中的區(qū)別,因此我們也不用關(guān)心它,只需要設(shè)想各個(gè)線程是同時(shí)執(zhí)行即可。 自從 “ 多線程下載 ” 技術(shù)發(fā)明 以來 , 這項(xiàng)技術(shù)得到前所未有的關(guān)注 已是不爭的事實(shí)。在 “ 網(wǎng)絡(luò)螞蟻 ” 軟件流行開后,許多下載軟件也 都紛紛效仿,是否具有 “ 多線程下載 ” 技術(shù)、甚至能支持多少個(gè)下載線程都成了人們評測下載軟件的要素。 “ 多線程下載 ” 的基礎(chǔ)是 WEB 服務(wù)器支持遠(yuǎn)程的隨機(jī)讀取,也即支持 “ 斷點(diǎn)續(xù)傳 ” 。這樣,在下載時(shí)可以把文件分成若干部分,每一部分創(chuàng)建一個(gè)下載線程進(jìn)行下載。 課題的研究意義 多線程和傳統(tǒng)的單線程在程序設(shè)計(jì)上最大的區(qū)別在于,由于各個(gè)線程的控制流彼此獨(dú)立,使得各個(gè)線程之間的代碼是亂序執(zhí)行 ,由此帶來的線程調(diào)度 問題。由于是多線程進(jìn)行斷點(diǎn)續(xù)傳,還要考慮記錄多個(gè)斷點(diǎn)位置,且記錄斷點(diǎn)位置時(shí)也要考慮同步互斥等問題。所有這些都使得這一步比較 復(fù)雜。 但是可以明顯提高網(wǎng)絡(luò)文件的下載速度。 現(xiàn)在,不要說編寫專門的下載軟件,在自己編寫的軟件中,加入下載功能有時(shí)也非常必要。如讓自己的軟件支持自動(dòng)在線升級,或者在軟件中自動(dòng)下載新的數(shù)據(jù)進(jìn)行數(shù)據(jù)更新,這都是很有用、而且很實(shí)用的功能。 第 2 頁 共 25 頁 可行性分析 可行性研究的目的,就是用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問題是否能夠解決。要達(dá)到這個(gè)目的,必須分析幾種主要的可能解法的利弊,從而判斷原定的系統(tǒng)規(guī)模和目標(biāo)是否現(xiàn)實(shí),系統(tǒng)完成后所能帶來的效益是否大到值得投資開發(fā)這個(gè)系統(tǒng)的程度。因此,可行性研究實(shí)質(zhì)上是要進(jìn)行一次 大大壓縮簡化了的系統(tǒng)分析和設(shè)計(jì)的過程,也就是在較高層次上以較抽象的方式進(jìn)行的系統(tǒng)分析和設(shè)計(jì)的過程。 系統(tǒng)的可行性分析主要包括技術(shù)上的可行性 和 操作上的可行性。 本系統(tǒng)的可行性分析如下: 技術(shù)可行性 下載 程序 功能模塊的實(shí)現(xiàn)主要利用了面向?qū)ο蟮?Java 高級編程語言。使用Java 作為開發(fā)工具主要是因?yàn)?Java 是目前比較流行而且非常成功的編程語言。 多線程編程技術(shù)是 Java 語言的重要特點(diǎn)。多線程編程的含義是將程序任務(wù)分成幾個(gè)并行的子任務(wù)。特別是在網(wǎng)絡(luò)編程中, 有 很多功能是可以并發(fā)執(zhí)行的。 Java 中實(shí)現(xiàn)多線 程的類有兩種方法 : 類,用它覆蓋Thread 類的 run 方法。 接口的類并將其它的實(shí)例與 實(shí)例相關(guān)聯(lián)。 Thread 類是負(fù)責(zé)向其它類提供線程支持的最主要的類,要使用一個(gè)類具有線程功能,在 Java中只要簡單地從 Thread類派生一個(gè)子類就可以了 。 擴(kuò)展 Thread類,如 。 由于同一進(jìn)程的多個(gè)線程共享同一片存儲(chǔ)空間,在帶來方便的同時(shí),也帶來了訪問沖突這個(gè)嚴(yán)重的問題。 Java 語言提供了專門機(jī)制以解決這種沖突,有效避免了同一個(gè)數(shù)據(jù)對象被多個(gè)線程同時(shí)訪問。 由于我們可以通過 private 關(guān)鍵字來保證數(shù)據(jù)對象只能被方法訪問,所以我們只需針對方法提出一套機(jī)制,這套機(jī)制就是 synchronized 關(guān)鍵字,它包括兩種用法: synchronized 方法和 synchronized 塊。 本系統(tǒng)使用 Eclipse 的 SWT 圖形界面技術(shù)進(jìn)行開發(fā),以 HttpClient 包 進(jìn)行支持,上述兩個(gè)軟件或是開發(fā)包均為免費(fèi)下載,十分方便。 操作可行性 下載程序的具備友好的用戶 界面,而且操作簡單易于被用戶接收,使用此下載程序十分方便,因?yàn)檐浖牟僮魉悸繁容^清晰,而且用戶實(shí)際操作的內(nèi)容較少,所以用戶只需要熟練操作計(jì)算機(jī)即可。因此從使用操作方面看,此系統(tǒng)得開發(fā)是可行的。 2 相關(guān)基礎(chǔ)知識(shí)以及開發(fā)平臺(tái) 第 3 頁 共 25 頁 JAVA 中的多線程與線程安全 Java 中的多線程 Java 不僅是一門語言,它已成為一門技術(shù),例如 Java 芯片技術(shù)、 Java 編譯技術(shù)、基于 Java 的信息家電聯(lián)網(wǎng)技術(shù)( Jini)等,并以它的平臺(tái)獨(dú)立性、健壯性、Java 虛擬機(jī)技術(shù)等特點(diǎn)受到廣大編程者青睞。 Java 能把所有東西從桌面計(jì)算機(jī)平穩(wěn)地轉(zhuǎn)換成基于網(wǎng)絡(luò)的計(jì)算,它是 Web 瀏覽器中必須具備的技術(shù),是一個(gè)完全面向?qū)ο蟮恼Z言,是有利于處理網(wǎng)絡(luò)協(xié)議的程序綜合庫。線程是從一個(gè)完整應(yīng)用程序分出的單獨(dú)的處理步驟,是程序內(nèi)部的一個(gè)順序控制流。一個(gè)小程序中可含1個(gè)或多個(gè)線程并可同時(shí)運(yùn)行,由于單線程一旦運(yùn)行就獨(dú)占線程的所有時(shí)間資源,而多線程的出發(fā)點(diǎn)就是提高系統(tǒng)的并發(fā)性,因此,引人注意的不是一個(gè)單獨(dú)的線程,而是在一個(gè)程序中實(shí)現(xiàn)多個(gè)線程,它意味著一個(gè)程序的多行語句同時(shí)執(zhí)行,即用搶占資源的方式對多個(gè)線程實(shí)現(xiàn)輪流執(zhí)行。例如 HotJava 瀏覽 器就是一個(gè)多線程的應(yīng)用實(shí)例。在 Java 語言中,多線程編程已成為編程的一個(gè)有效工具,可編制出界面友好、效率高的應(yīng)用程序。 Java 內(nèi)在支持多線程,其線程由 3 部分組成: ( 1)虛擬 CPU,封裝在 Java. lang. Thread 類中。 ( 2) CPU 所執(zhí)行的代碼,傳送給 Thread 類。 ( 3) CPU 所處理的數(shù)據(jù),傳送給 Thread 類。 Java 通過多線程有效地實(shí)現(xiàn)了多任務(wù)的并發(fā)執(zhí)行,所以,在 Java 多線程編程中,不僅考慮多線程自身的問題分析,還應(yīng)注意各線程在調(diào)度中出現(xiàn)的各種情況 。 Java 中的線程安全 當(dāng)對一個(gè)復(fù)雜對象進(jìn)行某種操作時(shí),從操作開始到操作結(jié)束,被操作的對象往往會(huì)經(jīng)歷若干非法的中間狀態(tài)。調(diào)用一個(gè)函數(shù)(假設(shè)該函數(shù)是正確的)操作某對象常常會(huì)使該對象暫時(shí)陷入不可用的狀態(tài)(通常稱為不穩(wěn)定狀態(tài)),等到操作完全結(jié)束,該對象才會(huì)重新回到完全可用的狀態(tài)。如果其他線程企圖訪問一個(gè)處于不可用狀態(tài)的對象,該對象將不能正確響應(yīng)從而產(chǎn)生無法預(yù)料的結(jié)果,如何避免這種情況發(fā)生是線程安全性的核心問題。 線程同步提供了保證不同線程按適當(dāng)順序使用共享資源的工具。線程可直接訪問共享數(shù)據(jù) , 既有相互之間高效 通信的優(yōu)點(diǎn),也有線程間任意相互干擾的弊端。安全的多線程數(shù)據(jù)使用方案要求不同線程處理不同的數(shù)據(jù),即多個(gè)線程不能共享臨界區(qū)。例如:有 10 張車票供 2 個(gè)顧客預(yù)定,而又要求 2 個(gè)顧客盡可能多地預(yù)定 10 張車票,這 10 張車票作為共享資源,可能導(dǎo)致 1 張票預(yù)定給 2 個(gè)顧客的情況,針對這種情況,設(shè)計(jì)時(shí)應(yīng)采用正確的同步機(jī)制。 第 4 頁 共 25 頁 若 2 個(gè)線程同步執(zhí)行時(shí)需要相互打開,就會(huì)出現(xiàn) 1 個(gè)線程依賴于另 1 個(gè)要打開的線程而形成死鎖。它不是資源不夠引起的,而是由線程的調(diào)度引起的。對于死鎖可用下述方法解決: ( 1)嘗試在盡可能短的時(shí)間內(nèi)執(zhí)行鎖定的代碼,占 用時(shí)間越長,另一線程出現(xiàn)和需要對象的可能性越大。 ( 2)當(dāng) 我們 從另一個(gè)被同步的方法中激活被同步的方法時(shí)要小心,最好是清楚地定義每個(gè)線程的任務(wù),并考慮使用什么數(shù)據(jù)和什么時(shí)候使用。 總之,在多線程程序設(shè)計(jì)中,要充分考慮各種可能出現(xiàn)的情況,并用適當(dāng)?shù)姆椒ńo予解決,使線程在運(yùn)行過程中按所預(yù)期定義的目標(biāo)進(jìn)行。 Http 協(xié)議簡介 HTTP 是 Web 協(xié)議集中的重要協(xié)議,它是從客戶機(jī) /服務(wù)器模型發(fā)展起來的??蛻魴C(jī) /服務(wù)器是運(yùn)行一對相互通信的程序,客戶與服務(wù)器連接時(shí),首先,向服務(wù)器提出請求,服務(wù)器根據(jù)客戶 的請求,完成處理并給出響應(yīng)。瀏覽器就是與Web 服務(wù)器產(chǎn)生連接的客戶端程序,它的端口為 TCP 的 80 端口。 舉一個(gè)大家都很常見的例子, 瀏覽器與 Web 服務(wù)器之間所遵循的協(xié)議就是 HTTP。 Web 的應(yīng)用層協(xié)議 HTTP 是 Web 的核心。 HTTP 在 Web 的客戶程序和服務(wù)器程序中得以實(shí)現(xiàn)。運(yùn)行在不同端系統(tǒng)上的客戶程序和服務(wù)器程序通過交換HTTP 消息彼此交流。 HTTP 定義這些消息的結(jié)構(gòu)以及客戶和服務(wù)器如何交換這些消息。 HTTP 定義 Web 客戶 (即瀏覽器 )如何從 Web 服務(wù)器請求 Web 頁面,以及服務(wù)器如何把 Web 頁面?zhèn)魉徒o客戶。 斷點(diǎn)續(xù)傳原理 其實(shí)斷點(diǎn)續(xù)傳的原理很簡單,就是在 Http 的請求上和一般的下載有所不同而已。 打個(gè)比方,瀏覽器請求服務(wù)器上的一個(gè)文 件 時(shí),所發(fā)出的請求如下: 假設(shè)服務(wù)器域名為 ,文件名為 。 GET / HTTP/ Accept: image/gif, image/xxbitmap, image/jpeg, image/pjpeg, application/ excel, application/msword, application/, */* AcceptLanguage: zh AcceptEncoding: gzip, deflate UserAgent: Mozilla/ (patible。 MSIE 。 Windows NT ) Connection: KeepAlive 服務(wù)器收到請求后,按要求尋找請求的文件,提取文件的信息,然后返回給瀏覽器,返回信息如下: 第 5 頁 共 25 頁 200 ContentLength=106786028 AcceptRanges=bytes Date=Mon, 30 Apr 2020 12:56:11 GMT ETag=W/02ca57e173c11:95b ContentType=application/octetstream Server=MicrosoftIIS/ LastModified=Mon, 30 Apr 2020 12:56:11 GMT 所謂斷點(diǎn)續(xù)傳,也就是要從文件已經(jīng)下載的地方開始繼續(xù)下載。所以在客戶端瀏覽器傳給 Web 服務(wù)器的時(shí)候要多加一條信息 從哪里開始。 下面是用自己編的一個(gè) 瀏覽器 來傳遞請求信息給 Web 服務(wù)器,要求從2020200 字節(jié)開始。 GET / HTTP/ UserAgent: NetFox RANGE: bytes=2020200 Accept: text/html, image/gif, image/jpeg, *。 q=.2, */*。 q=.2 仔細(xì)看一下就會(huì)發(fā)現(xiàn)多了一行 RANGE: bytes=2020200, 這一行的意思就是告訴服務(wù)器 這個(gè)文件從 2020200 字節(jié) 開始傳,前面的字節(jié)不用傳了 。服務(wù)器收到這個(gè)請求以后,返回的信息如下: 206 ContentLength=106786028 ContentRange=bytes 2020200106786027/106786028 Date=Mon, 30 Apr 2020 12:55:20 GMT ETag=W/02ca57e173c11:95b ContentType=application/octetstream Server=MicrosoftIIS/ LastModified=Mon, 30 Apr 2020 12:55:20 GMT 和前面服務(wù)器返回的信息比較一下,就會(huì)發(fā)現(xiàn)增加了一行 : ContentRange=bytes 2020200106786027/106786028 返回的代碼也改為 206 了,而不再是 200 了。 知道了以上原理,就可以進(jìn)行斷點(diǎn)續(xù)傳的編程了。 3 需求分析 分析 第 6 頁 共 25 頁 隨著 Inter 的發(fā)展,進(jìn)入信息時(shí)代后 快速獲得網(wǎng)絡(luò)共享資源成為很簡單的事情,人們對 互聯(lián)網(wǎng) 也有了很大的依賴性。人們甚至希望只輕松點(diǎn)擊鼠標(biāo)就可以得到自己想要的 東西。比如, 針對一些專業(yè)的論壇提供了很多相關(guān)資料以方便人們閱讀或了解;還有更多的人希望能過下載到他們喜歡聽得音樂、好看的圖片、喜歡的電影等等。 也可以看出人們在上網(wǎng)時(shí)再也不單是打開瀏覽器來瀏覽網(wǎng)頁,越來越多的人們開始使用下載軟件來獲取資源。同時(shí)人們也更希望使用更新更快的下載軟件。 由于用戶下載需求的增大,也要求下載軟件能夠迅速完成對資源的下載。多線程程序設(shè)計(jì)可以很好的解決程序并發(fā)的問題。最恰當(dāng)?shù)谋扔骶褪怯脩魰?huì)感到CPU 似乎同時(shí)出現(xiàn)在兩個(gè)
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1