要抓的資料量有點多,很多個頁面,並且都一樣的處理,那麼直接就上線程池吧.搜了搜,得到了結果,用executors.newfixedthreadpool()來生產出乙個固定大小的執行緒池,後面所有的任務都會被放置在任務佇列中.ok,開始寫
建立執行緒池
executorservice executorservice = executors.newfixedthreadpool(10);提交任務這就建立了乙個大小為10的執行緒池
executorservice.submit(runnable task);等待所有任務都完成再繼續執行下面的**
executorservice.shutdown();//不在接受新任務
while (true)
thread.sleep(1000);
}
這是我提交任務的**//crawl是我實現runnable介面的類在於提交任務這一條**,我的task最開始需要外部提供乙個httpclient例項,我的實現是在外部只生成乙個httpclient例項,每次啟動新任務都把這個client傳進去(心想著這樣可以省去在每個執行緒中生成新client的過程,應該可以提高效率)executorservice.submit(new crawl(client));//把外部的client例項傳進去
但是事實是用上面的方法真的是特別特別的慢,雖然可能是比單執行緒快,但是還是慢的讓人著急,並且在抓一些資料後會頻繁發生各種」超時異常」,直到我靈光一現,想著讓每個執行緒自己去new自己的httpclient物件吧,不管它了,試一試,一下子,我感覺自己在天上飛,真的,飛起來了,快的我想哭.真的
重要的事說三遍請在每個執行緒中生成自己的httpclient例項
請在每個執行緒中生成自己的httpclient例項
請在每個執行緒中生成自己的httpclient例項
當CAsyncSocket遇到多執行緒
用多執行緒方法設計socket程式時,你會發現在跨執行緒使用casyncsocket及其派生類時,會出現程式崩潰。所謂跨執行緒,是指該物件在乙個執行緒中呼叫create attachhandle attach函式,然後在另外乙個執行緒中呼叫其他成員函式。下面的例子就是乙個典型的導致崩潰的過程 cas...
當流氓遇到劫匪
當流氓遇到劫匪 文 寧宇 周五看到六家網際網路公司聯合發表的宣告,抵制流量劫持等違法行為,有人認為這矛頭直指運營商。我對這個領域並不太懂,但也看這其中有很多誤解,還是有必要解釋一下的。首先,從純技術的角度看 流量劫持 客戶原本想訪問a 但是中間有人用技術手段,使實際開啟的是b 這些利用技術手段調整使...
當回車遇到換行
大家在寫文件或者寫 時都經常會用到換行操作,實際上我們都是使用鍵盤上的回車鍵進行換行。那麼,今天的問題來了,在按下回車鍵時系統做了哪些處理?回車鍵盤只是換行嗎?回車和換行是同一回事嗎?但實際並非完全如此。我們再來看看什麼是回車鍵,在打字機上有乙個叫字車的部件,在打字的時候它會根據所打的字元向前移動,...