一般只要是產生的cpu資源浪費,就需要多執行緒來提公升效率。
我們舉乙個例子,例如乙個網路爬蟲專案,其中有兩個環節
這樣的話如果使用單執行緒,平均處理每個**的時間大約是52ms。其實這樣已經產生的大量的資源浪費。
在cpu進行資料抓取的50ms時,cpu的資料處理沒辦法進行,所以就要等50ms,之後再處理2ms,這樣才會處理完成乙個**。
如果我們採取多執行緒來抓取資料。我們在這裡的說法全部是理想狀態下,不考慮執行緒之間的切換損耗的資源。
這裡有兩種方案,一種是同事開啟25個執行緒,然後同時抓取**的資訊。然後抓取完成後的執行緒就可以去處理資料,其他的執行緒互不干擾,這裡有一種說法,就是同時啟動,同時抓取,這樣跟單執行緒有什麼區別嗎?還是會等待。這裡我們舉乙個例子。
我們在進行1000公尺長跑的時候,相信大家都遇到過這樣的一種情況,25個人同時起跑,第一圈可能差不多同時到達,但是慢慢的,隊伍就會被拉長,原因就是每個人的具體速度是不一樣的。這樣漸漸的就會雜湊開來,類似於這樣:
因為具體的抓取時間可能因為**的內容不一致,和網速的種種原因,造成每個**抓取的時間不太一樣,所以我們這裡用的是平均時間,雜湊開來的話就會形成上面的局面,這樣cpu就會很充分被使用了。
還有一種情況,就是開啟26個執行緒,其中25個執行緒負責**的抓取,其中的乙個專門負責處理。這樣開啟或者改變,再或者關閉執行緒的時候就需要對那乙個負責處理的執行緒進行資料通訊,告訴他是改變還是關閉。
這就是乙個真實的專案用到的多執行緒的樣例。
Java 多執行緒的應用
class info 主資訊類 public string getname public void setcontent string content public string getcontent public synchronized void set string name,string c...
java多執行緒的簡單應用
最近在做推送相關的模組,在群推時發現新增log效率比較低,特別是批量update操作,所以使用非同步操作log比較好 建乙個類asynpushrecord,寫從初始化方法設定執行緒基礎引數 postconstruct public void init 關於的threadpoolexecutor用法看...
Java多執行緒應用 condition的使用
它沒有明確指定喚醒那條執行緒。下面是乙個例項 同起三條執行緒,分別執行private aaa a new aaa 物件的三個方法,讓三個方法按指定的順序列印輸入,先是ooo方法迴圈3次,接著nnn方法迴圈5次,接著mmm方法迴圈7次,這樣依次執行迴圈10次 classname conditionte...