/ / Разлика между феномените за създаване на нишки и стартирането им - java, многонишковост, runnable

Разликата между феномените за създаване на нишки и тяхното стартиране - java, multithreading, runnable

Каква е разликата между двете нишки в кода по-долу:

public class MyThread extends Thread
{
int a=0;

public void run()
{
System.out.println("Some Thread");
}

public static void main(String[] args)
{

MyThread m=new  MyThread();

Thread t=new Thread(m);
m.start();     //what is difference between this
t.start();     //and this

}
}

И двете ми дават същия резултат.

Отговори:

1 за отговор № 1

Ако сте създали

Thread t = new Thread();

Тогава методът за изпълнение няма да направи нищо като ThreadМетодът за изпълнение е

@Override
public void run() {
if (target != null) {
target.run();
}
}

където целта е нула. Ако преминете мишена

Thread t = new Thread(target)

след това нишката ще изпълни метода за изпълнение на целта.

Ако сте удължили MyThread тогава run метод в MyThread ще изпълни


3 за отговор № 2

Примерът с нишката ще бъде от различен тип в двата случая - MyThread срещу. Thread - но run Методът, който трябва да се изпълни, когато стартирате нишките, ще бъде същият.

Когато създавате a Thread с new Thread(m), ти не трябва да минеш Thread инстанция. Вие просто трябва да преминете един пример за прилагане на Runnable интерфейс.


1 за отговор № 3

Това е в крайна сметка същото поведение.

Thread сечива Runnable и Thread има конструктор, който приема a Runnable, Следователно new Thread(m); използва Runnable прилагането на неговия аргумент. Но в крайна сметка същото run използва метод, само Thread случаите са различни.


1 за отговор № 4

Има няколко възможности за преминаванеИзпълняват се изпълнения към Thread и го стартират като Thread, но във вашия пример той използва само допълнително CPU време. Ще има смисъл да се използва в ситуация като тази по-долу.

class MyClass extends OtherClass implements Runnable { .. }

MyClass mm = new MyClass(..);
Thread t = new Thread(mm);
...

1 за отговор № 5

Когато предавате Runnable обект в конструктора Thread (r), Runnable става нишката делегат, Днес делегацията се счита за по-мощен и по-гъвкав начин за организиране на програма, отколкото наследяване. Това е особено вярно в Java, където няма множествено наследяване.

Когато давате на нишката делегат, делегатътсъщо може да наследи от някакъв друг клас (както е показано в user2794960 's пример) .Но ако направите "нишка" клас наследи от Thread, тогава той може да' t също наследи от всеки друг.

Знаете, че имате работа с делегацията, когато казвате Foo има Бар вместо да казва Foo е бар.