日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java多线程的优点_【java多线程的优点】

發(fā)布時間:2024/9/27 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程的优点_【java多线程的优点】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者:Jakob Jenkov? ?? ???翻譯:古圣昌? ?? ?? ?? ?校對:歐振聰

盡管面臨很多挑戰(zhàn),在java學(xué)習(xí)中多線程有一些優(yōu)點使得它一直被使用。這些優(yōu)點是:

資源利用率更好

程序設(shè)計在某些情況下更簡單

程序響應(yīng)更快

資源利用率更好

想象一下,一個應(yīng)用程序需要從本地文件系統(tǒng)中讀取和處理文件的情景。比方說,從磁盤讀取一個文件需要5秒,處理一個文件需要2秒。處理兩個文件則需要:5秒讀取文件A

2秒處理文件A

5秒讀取文件B

2秒處理文件B

---------------------

總共需要14秒

復(fù)制代碼

從磁盤中讀取文件的時候,大部分的CPU時間用于等待磁盤去讀取數(shù)據(jù)。在這段時間里,CPU非常的空閑。它可以做一些別的事情。通過改變操作的順序,就能夠更好的使用CPU資源。看下面的順序:5秒讀取文件A

5秒讀取文件B + 2秒處理文件A

2秒處理文件B

---------------------

總共需要12秒

復(fù)制代碼

CPU等待第一個文件被讀取完。然后開始讀取第二個文件。當(dāng)?shù)诙募诒蛔x取的時候,CPU會去處理第一個文件。記住,在等待磁盤讀取文件的時候,CPU大部分時間是空閑的。

總的說來,CPU能夠在等待IO的時候做一些其他的事情。這個不一定就是磁盤IO。它也可以是網(wǎng)絡(luò)的IO,或者用戶輸入。通常情況下,網(wǎng)絡(luò)和磁盤的IO比CPU和內(nèi)存的IO慢的多。

程序設(shè)計更簡單

在單線程應(yīng)用程序中,如果你想編寫程序手動處理上面所提到的讀取和處理的順序,你必須記錄每個文件讀取和處理的狀態(tài)。相反,你可以啟動兩個線程,每個線程處理一個文件的讀取和操作。線程會在等待磁盤讀取文件的過程中被阻塞。在等待的時候,其他的線程能夠使用CPU去處理已經(jīng)讀取完的文件。其結(jié)果就是,磁盤總是在繁忙地讀取不同的文件到內(nèi)存中。這會帶來磁盤和CPU利用率的提升。而且每個線程只需要記錄一個文件,因此這種方式也很容易編程實現(xiàn)。程序響應(yīng)更快將一個單線程應(yīng)用程序變成多線程應(yīng)用程序的另一個常見的目的是實現(xiàn)一個響應(yīng)更快的應(yīng)用程序。設(shè)想一個服務(wù)器應(yīng)用,它在某一個端口監(jiān)聽進(jìn)來的請求。當(dāng)一個請求到來時,它去處理這個請求,然后再返回去監(jiān)聽。

服務(wù)器的流程如下所述:while(server is active){

listen for request

process request

}

復(fù)制代碼如果一個請求需要占用大量的時間來處理,在這段時間內(nèi)新的客戶端就無法發(fā)送請求給服務(wù)端。只有服務(wù)器在監(jiān)聽的時候,請求才能被接收。另一種設(shè)計是,監(jiān)聽線程把請求傳遞給工作者線程(worker thread),然后立刻返回去監(jiān)聽。而工作者線程則能夠處理這個請求并發(fā)送一個回復(fù)給客戶端。這種設(shè)計如下所述:

while(server is active){

listen for request

hand request to worker thread

}

復(fù)制代碼

這種方式,服務(wù)端線程迅速地返回去監(jiān)聽。因此,更多的客戶端能夠發(fā)送請求給服務(wù)端。這個服務(wù)也變得響應(yīng)更快。

桌面應(yīng)用也是同樣如此。如果你點擊一個按鈕開始運行一個耗時的任務(wù),這個線程既要執(zhí)行任務(wù)又要更新窗口和按鈕,那么在任務(wù)執(zhí)行的過程中,這個應(yīng)用程序看起來好像沒有反應(yīng)一樣。相反,任務(wù)可以傳遞給工作者線程(word thread)。當(dāng)工作者線程在繁忙地處理任務(wù)的時候,窗口線程可以自由地響應(yīng)其他用戶的請求。當(dāng)工作者線程完成任務(wù)的時候,它發(fā)送信號給窗口線程。窗口線程便可以更新應(yīng)用程序窗口,并顯示任務(wù)的結(jié)果。對用戶而言,這種具有工作者線程設(shè)計的程序顯得響應(yīng)速度更快。

總結(jié)

以上是生活随笔為你收集整理的java多线程的优点_【java多线程的优点】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。