ПредишенСледващото

Многонишково - първи стъпки

Когато интервюто се разглежда въпросът за многонишково, а след това се чувствам много неудобно. И не защото те не знаят темата - Аз вярвам, че аз разбирам, че достатъчно добре. Но страхопочитанието и тайната, която е обвит в тази област на експертиза, са досадно. Защото, въпреки че е трудно, но това се подразбира. Но sobesedovateli може да търси (и да намерят) съвсем различни значения и характеристики. Не може да се съгласи с мнението :).
Ако сте разбрали какво точно е това и каква е сложността на наличните инструменти за вас, толкова повече проблемът не е в най-многонишкова, но сложността на управлението на задачите, за които се използва. Ние разделяме нашата история на няколко части:

  1. Защо многонишкова?
  2. Как да създадете теми
  3. Какви са предизвикателствата и защо
  4. Инструменти за решаване на проблеми

Напълно признавам, че моето възприятие е субективно и някои точки и тънкости, не могат да влязат в това описание. Просто защото по-дълбоко се потопите в тези проблеми, най-интересните неща, за да бъдат намерени (на нивото на изпълнение на JVM, или на нивото на архитектурата на процесора). Необходимо е също така да се вземе предвид, че също така се влияе на характера на задачите - всъщност решаването на проблеми се сблъскваме с всички ограничения, особено изпълнението и други трудни моменти.

Защо многонишкова

Отговорът на този въпрос не е проблем. В момента броят на процесорите в сървърни системи, повече от един, и един процесор има няколко ядра. Predagayu демонстрира това с един пример. Бъдете внимателни - класът е в опаковка edu.javacourse.threads

Макар и да не разработва - просто стартирайте този прекрасен пример, но не и преди да те съветвам, за да стартирате диспечера на задачите, за да видите натоварване на процесора. Ето какво на снимката се вижда в мен.

Многонишково - първи стъпки

Потоци ви позволяват да стартирате няколко задачи в едно заявление в ръчен режим. В най-простата си форма, в рамките на едно и също приложение, винаги има един основен поток. Винаги. Но допълнителни теми, с които трябва да се изпълнява. И старта - не най-сложните. Най slozhngoe ги накара да работят заедно. Но ние ще разгледаме това по-късно. В същото време, нека просто да се научат да работят потоци.

Как да създадете теми

За да започнете потока (може да се усмихва) има специален клас - тема (конци). Също така, има още две интерфейси, но за да работи с тях, ще се справят с по-късно. Пишем най-прост заявлението и го обясня по-подробно.

Първо, да разгледаме SimpleRunnable код клас. Как видя то не много по-различен от предишния случай - разликата се състои в това, че ние не наследяват от класа по темата. и прилагане на Изпълнима интерфейс. Pereopredeyaemy метод е точно същото, както се използва за - бягай. разликите са минимални.
Сега обърнете внимание на SimpleThreadManager клас. Както виждаме тук, ние използваме малко по-различен алгоритъм тече поток. На първо място, се създаде обект SimpleRunnable клас. след това се създаде обект от класа Thread. който в конструктора подаваме нашия обект. И след това, което наричаме метода на старт. По време на разговора започне klassThread проверки, за да се види дали тя премина в конструктора на даден обект, който реализира Изпълнима интерфейс. Ако отговорът е да - тогава започва методът план на обекта мина. Ако не - Тема обект ще изпълни метод своята серия. Като цяло, това също е доста проста.
Може би се чудите - защо създаване на интерфейс, когато е налице клас Тема. Отговорът, като цяло, е очевидна - в крайна гъвкавост. Тъй като в този случай работи в отделна нишка може да бъде каквото и клас. Т.е. ние можем да създадем клас в сложно изчисление - например, за да се изчисли печалбата на строителните работи /
Поръчки / т.н. по силата на договора. Това е на пешеходно в базата данни, както и някои файлове може външни заявки към други системи. Най-общо - за дълго време. И когато тези споразумения парчета 40. Сега можем да започнем изчисляването на няколко договора паралелно и в този случай сложен клас не трябва да бъде наследник на темата.

Предаване на параметри

За домашна работа, опитайте се да напиша такава форма, че "работи" на екрана от ляво на дясно (или отгоре надолу) и когато достигне границата започва да се движи в обратна посока.

Сега можем да преминем към следващата част от разказа на многонишково, която ще ви запознае със света на смразяващ кръвта ужас, произтичащи от съвместната работа на няколко потока :).

Благодаря. Добавих статията - сега тя съдържа това, което исках. Но многонишкова в тази статия не е свършила - все още има много интересни неща.

По този начин, процесорът избира как да паралелизация процеси в многонишкова среда?

Там всичко е много сложно и аз не правя точно всичко, което мога да кажа 🙂 същество потоци - тази операционна система предмети (Windows, Linux). JVM създава теми, като операционна система обекти, и те имат до известна степен контрол. Но операционната система също прави и че тя "товар" задачите процесора и нишки.
За да бъда честен - аз не съм толкова дълбоко потопен в JVM, за да отговори по-подробно. Напълно призная, че дори и в тези редове аз ако сме сбъркали.

Здравейте, колкото можете, моля обяснете точно първият за приложения, където се сравняват работата на компютрите в една нишка и многонишкова. По-специално BigTaskManyThreads клас.

Threading крайна сметка се контролира от операционната система, както и Linux прави по различен начин от Windows. Така, че тези промени са възможни - Linux се опитва да не се даде на един процес, за да заредите всички CPU много.

"Аз го направих, като параметър на конструктора, но със сигурност можете да направите това, като се обадите инкубатора (предлагам ви да реализира такава възможност - това е лесно)."
Не е трудно, но за начинаещ да се уверите, не улики, различни от работа за по-добро разбиране и консолидиране са обхванати материал.

ВАЖНО. С локализация е едно нещо - ако възнамерявате да използвате българската азбука, не можете да напишете директно.
На първо място по същия NetBeans следи тази ситуация автоматично. IDEA, също - макар че тя трябваше да се каже за него в настройките.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!