2013-06-24 3 views
1

아파치의 HttpClient를 사용하여 웹 사이트를 만드는 응용 프로그램이 있습니다. UI 스레드 (사용자가 서브 페이지 다운로드를 주문할 수있는 곳)와 매 x 초마다 HttpPost를 사용하여 메인 페이지를 새로 고침하는 2 개의 스레드가 있습니다. 사용자가 다시로드하는 동안 다른 페이지의 다운로드를 시작할 때 (둘 다 동일한 DefaultHttpClient를 사용하는 경우) 동기화 문제가 발생합니다 (소켓 오류로 인해 쿼리가 즉시 종료 됨). 중요한 것은 쿠키가 필요하다는 것입니다 (사용자는 세션을가집니다). 내 질문 : 같은 순간에 하나의 HttpClient와 쿼리 대기열을 사용하지 않아야합니까? 또는 각 스레드마다 고유 한 HttpClient가 있어야하며 공통된 컨텍스트가 있어야합니다. 또는이 오류를 제거하는 다른 방법이 있습니까?안드로이드 - HttpClient 및 멀티 스레딩

JSoup보다 빠른 HTML 구문 분석기를 알고 있는지 물어보고 싶습니다. 그것은 꽤 빠르다, 나는 동의한다. 그러나 아마 더 좋은 무엇인가있다?

+0

나는 비동기 작업을 사용 - 문제가 동기화는 ... – karex

답변

0

각 스레드마다 HTTPClient가 있어야합니다. 일반적인 일을하고 있다면 (위험 할 수도 있음). 스레드를 안전하게 만들려면 동기화 된 블록을 메서드 수준에 놓거나 공통 작업을 수행 할 위치에 두어야합니다.

권장 사항 : 스레드로 작업하는 동안 작업을 최대한 많이 분리하십시오. 전혀 공통된 작업이있는 경우 동기화 된 블록을 사용하십시오.