предаване на данни от и към поток

Основни Java технологии /

Нишки и процеси

11 ноември 2011 00:08

На пръв поглед въпросът е елементарен, но не мога да разбера. Тепърва започвам да се занимавам с потоци, така че не съдете твърде строго. Задачата е да паралелизирам изпращането на HTTP заявки. Преди това изпращах различни заявки към един и същ сървър в цикъл, оказва се, че след всяко изпращане програмата чака резултата и след това изпраща само следващата заявка. Цялото това нещо работи дълго и досадно, на всяка заявка идва страница с отговор и след края на работата броячът на трафика показва какво е получено за цялото време, докато програмата работи 9Mb - изглежда не е много, но работи толкова дълго. И тогава реших да добавя многопоточност към приложението. Кодът в примера не е сложен:

Как мога да направя така, че параметърът да се предава на метода run()? Ако разбирам правилно, методът run() се стартира, когато се извика методът start(). По някаква причина. И ако напиша, мога ли да получа резултата по следния начин:

Ако не, как тогава? Може би задавам твърде прост въпрос, но не успях да го намеря в интернет. Става въпрос само за входно/изходни потоци и различни readDouble(), readFloat(). Не мога да разбера как това е свързано с простото предаване на параметър при стартиране на нишката и получаване на резултата, когато нишката свърши.

11 ноември 2011 13:35

Ами, първо, не можете да подадете нищо към метода веднъж. И дори да декларирате нов, той няма да бъде извикан, защото публичният void run метод се извиква от интерфейса Runnable.

Второ. никой не ви притеснява да направите променлива на клас и да я свържете в мрежа, преди да стартирате нишката.

Трето, няма да получите нищо и от join (вижте подписа на метода)

Ако трябва да получите стойността след изпълнение на нишката, използвайте интерфейса Callable. Приима метод за извикване, който се извиква при стартиране на нишката и се връща стойност от него след изпълнение. Но в този случай трябва да стартирате нишки чрез ExecutorService.