рах різні потоки можуть відповідати за роботу з мережею, анімацію, розрахунок фізики і т.д.
Розглянемо приклад реалізації багатопоточності з нашої програми. Додаток використовує механізм багатопоточності для паралельного скачування файлів. Для кожного завантаження відкривається новий потік завантаження. Код методу run () потоку, що виконує безпосередню завантаження файлів:
Метод запуску потоку завантаження, всередині нього створюється HTTP з'єднання з необхідними параметрами і запускається скачування.
public void run () {file=null; stream=null;
/ / Створює клас обробки файловparser=new Parser (); httpclient=new DefaultHttpClient ();
try {
/ / Додавання перехоплення запиту і відповіді для правильної обробки
/ / файлів, які стиснуті методом GZIP.addRequestInterceptor (new HttpRequestInterceptor () {
public void process (HttpRequest request, HttpContext context) throws HttpException, IOException {(! request.containsHeader («Accept-Encoding")) {. addHeader («Accept-Encoding», «gzip») ;
}
}
});. addResponseInterceptor (new HttpResponseInterceptor () {void process (HttpResponse response, HttpContext context) throws HttpException, IOException {entity=response.getEntity (); (entity!=null) {ceheader= entity.getContentEncoding (); (ceheader!=null) {[] codecs=ceheader.getElements (); (int i=0; i
return;
}
}
}
}
}
});
/ / Формування запиту на WEB-сервер з необхідними параметрами для
/ / можливості докачки файловhttpget=new HttpGet (this.url.toString ());
httpget.addHeader («Range»,
«bytes =» + downloaded + »-»);. addHeader («Accept», «text / html, application / xhtml + xml, application / xml; q=0.9, * / *; q=0.8 »);. addHeader (« Pragma »,« no-cache »);. addHeader (« User-Agent », Common.USERAGENT); response=httpclient.execute (httpget);
/ / Перевірка, що відповідь сервера говорить про успішну обробці запиту
if (response.getStatusLine (). getStatusCode () / 100!=2) {();
}
/ / Обчислення решти документа для дозавантаження
long contentLength=- 1; (response.getHeaders («Content-Length»). length == 0) (); {= Long.valueOf (response.getHeaders («Content-Length») [0]. getValue ()); (contentLength <1) {();
}
}
(size == - 1) {= contentLength; ();
} fullFileName; tempFileName; (getFileName (url.getUrl ()). length () <2)=downloadManager.globalInfo.getSiteSaveTempPath () + File.separator + Common.getTempfileName («index. html »);=downloadManager.globalInfo.getSiteSaveTempPath () + File.separator + Common.getTempfileName (getFileName (url.getUrl ()));
/ / Перевірка, чи необхідний розбір файлу на наявність в...