/ / Простий сценарій Thread у Java, де інтерфейс Runnable не потрібно реалізовувати класом реалізації Thread - Java

Простий сценарій Thread в Java, де інтерфейс Runnable не потрібно реалізувати за класом implementing thread - java

Давайте подивимось на наступний код, він працює точно.

final class DemoThread
{
public void temp()
{
new Thread(new Runnable()
{
public void run()
{
System.out.println( "Isn"t it great ?" ) ;
}
} ) .start() ;
}
}

final public class Main
{
public static void main(String[] args)
{
new DemoThread().temp();
}
}

Він чудово працює і відображає повідомлення Хіба це не здорово? на консолі. Питання тут лише в тому, чому інтерфейс Runnable не повинен бути реалізований класом DemoThread?

Відповіді:

5 за відповідь № 1

Runnable реалізується анонімний внутрішній клас в межах temp спосіб:

new Thread(new Runnable()
{
public void run()
{
System.out.println( "Isn"t it great ?" ) ;
}
} ) .start() ;

Враховуючи, що екземпляр DemoThread не є передається в Thread конструктор, незалежно від того, реалізований він чи ні Runnable повністю ортогональна тому, як працює потік.

Ваш код подібний до цього:

final class DemoThread
{
public void temp()
{
new Thread(new Anonymous()).start();
}

private class Anonymous implements Runnable
{
public void run()
{
System.out.println( "Isn"t it great ?" ) ;
}
}
}

Це робить це для вас зрозумілішим?


3 для відповіді № 2

DemoThread насправді нічого не робить з Thread себе. Це нерест нового Thread який обертається навколо анонімного класу, який реалізує Runnable.

new Runnable()
{
public void run()
{
System.out.println( "Isn"t it great ?" ) ;
}
}

Створює новий клас. Ви побачите це у файловій системі під час запуску javac.


2 для відповіді № 3

Що має реалізувати інтерфейс Runnable - це об'єкт, який ви передаєте як параметр об'єкту Thread, що і буде виконано.

У вашому випадку ви вже оголосили анонімний клас, який реалізує Runnable, який передається об'єкту Thread.

new Thread(new Runnable()   // <--- This is the class that"s implementing Runnable
{
public void run()
{
System.out.println( "Isn"t it great ?" ) ;
}
} ) .start() ;