„Здравей, Амиго! Ели ти каза за нишките и аз ще ти кажа How работиш с тях. За да създадеш нова нишка, трябва да:“

1)  Създайте обект Thread

2) Предайте метода, който искате да стартирате

3)  Извикайте метода start на създадения обект Thread.

Помислете за този пример:

Код Описание
class Printer implements Runnable
{
public void run()
{
System.out.println("I’m printer");
}
}
Клас, който имплементира интерфейса Runnable .
public static void main(String[] args)
{
Printer printer = new Printer();
Thread childThread = new Thread(printer);
childThread.start();
}
1 Създайте екземпляр на класа Printer, който имплементира метода run.
2 Създайте нов обект Thread. Предаваме на конструктора принтерния обект, чийто метод run() трябва да бъде извикан.
3 Стартирайте новата нишка, като извикате метода start() .

Малките Java програми обикновено се състоят от една нишка, наречена „главна нишка“. Но програмите по-често стартират допълнителни нишки, които се наричат ​​«детски нишки». Основната нишка изпълнява основния метод и завършва. Методът за изпълнение на Runnable е аналогичен метод за дъщерни нишки.

„А, много нишки означава много основни методи.“

Създаване и стартиране на нови теми - 1

За да кажем на обект Thread кой конкретен метод трябва да стартира, трябва по няHowъв начин да му предадем метод. В Java това се прави с помощта на интерфейса Runnable . Този интерфейс съдържа един абстрактен метод: void run() . Класът Thread има конструктор Thread(Runnable Runnable) . Можете да подадете всеки обект, който имплементира интерфейса Runnable .

Вашият клас трябва да наследи Runnable и да замени неговия метод за изпълнение . Извикването на този метод е това, което стартира новата нишка. Можете да пишете Howвото искате в метода run .

Код Описание
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Клас, който имплементира интерфейса Runnable.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

Printer printer2 = new Printer("Jack");
Thread thread2 = new Thread(printer2);
thread2.start();
}
Създайте две нишки, всяка от които ще бъде базирана на собствен обект Printer.
public static void main(String[] args)
{
Printer printer = new Printer("Natasha");

Thread thread1 = new Thread(printer);
thread1.start();

Thread thread2 = new Thread(printer);
thread2.start();

Thread thread3 = new Thread(printer);
thread3.start();
}
Създайте три нишки на базата на един обект Printer.

Нещо повече, можете да комбинирате всичко това в един клас. Класът Thread наследява интерфейса Runnable , така че трябва само да замените неговия метод за изпълнение:

Друг начин за създаване на нова тема
class Printer extends Thread
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Наследете класа Thread , който имплементира интерфейса Runnable , и след това заменете метода run .
public static void main(String[] args)
{
Printer printer = new Printer("Jack");
printer.start();

Printer printer2 = new Printer("Jack");
printer2.start();

}
Създайте две нишки, всяка от които ще бъде базирана на собствен обект 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() .“