„Здравей, Амиго! Ели ти каза за нишките и аз ще ти кажа How работиш с тях. За да създадеш нова нишка, трябва да:“
1) Създайте обект Thread
2) Предайте метода, който искате да стартирате
3) Извикайте метода start на създадения обект Thread.
Помислете за този пример:
Код | Описание |
---|---|
|
Клас, който имплементира интерфейса Runnable . |
|
1 Създайте екземпляр на класа Printer, който имплементира метода run. 2 Създайте нов обект Thread. Предаваме на конструктора принтерния обект, чийто метод run() трябва да бъде извикан. 3 Стартирайте новата нишка, като извикате метода start() . |
Малките Java програми обикновено се състоят от една нишка, наречена „главна нишка“. Но програмите по-често стартират допълнителни нишки, които се наричат «детски нишки». Основната нишка изпълнява основния метод и завършва. Методът за изпълнение на Runnable е аналогичен метод за дъщерни нишки.
„А, много нишки означава много основни методи.“
За да кажем на обект Thread кой конкретен метод трябва да стартира, трябва по няHowъв начин да му предадем метод. В Java това се прави с помощта на интерфейса Runnable . Този интерфейс съдържа един абстрактен метод: void run() . Класът Thread има конструктор Thread(Runnable Runnable) . Можете да подадете всеки обект, който имплементира интерфейса Runnable .
Вашият клас трябва да наследи Runnable и да замени неговия метод за изпълнение . Извикването на този метод е това, което стартира новата нишка. Можете да пишете Howвото искате в метода run .
Код | Описание |
---|---|
|
Клас, който имплементира интерфейса Runnable. |
|
Създайте две нишки, всяка от които ще бъде базирана на собствен обект Printer. |
|
Създайте три нишки на базата на един обект Printer. |
Нещо повече, можете да комбинирате всичко това в един клас. Класът Thread наследява интерфейса Runnable , така че трябва само да замените неговия метод за изпълнение:
Друг начин за създаване на нова тема | |
---|---|
|
Наследете класа Thread , който имплементира интерфейса Runnable , и след това заменете метода run . |
|
Създайте две нишки, всяка от които ще бъде базирана на собствен обект Printer . |
„Това е по-елегантно решение.“
„Да, но има своите недостатъци:“
1) Може да се наложи да стартирате няколко нишки въз основа на един обект, Howто в примера с Наташа.
2) Ако наследите от класа Thread, не можете да добавите друг родителски клас към вашия клас.
3) Ако вашият клас има родителски клас, не можете да добавите Thread като втори родителски клас.
"С други думи, след извикването на метода start, всяка от нишките започва да изпълнява метода run на обекта, предаден на конструктора?"
"Да. Ако нищо не се предава на конструктора, тогава Thread просто изпълнява вътрешния си метод за изпълнение."
„Но защо просто не извикаме метода така?“
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
printer1.run();
}
„Когато основната нишка достигне метода run , неговият „малък робот“ просто влиза вътре и изпълнява всички команди вътре в нея. Само след като бъдат изпълнени, той ще се върне към основния метод и ще продължи изпълнението на следващи команди. По този начин няма втора " малък робот" . Цялата работа ще се извършва последователно, а не паралелно (едновременно)."
„Разбирам. Можете ли да извикате няHowъв друг метод, нещо различно от run?“
„Не. Всичко е свързано с интерфейса Runnable, който „знае“ само за един от методите си: run() .“
GO TO FULL VERSION