Подтвердить что ты не робот

В простом для понимания объяснении, что такое Runnable в Java?

Что такое "runnable" в Java, в условиях непрофессионала? Я студент в области программирования AP в старшей школе, чье задание - заниматься исследованиями или искать других, что такое "runnable" (мы просто попадаем в ООП и еще не трогали потоки).

4b9b3361

Ответ 1

Runnable - это в основном тип класса (Runnable - это интерфейс), который можно поместить в поток, описывая, что должен делать поток.

Runnable Interface требует от класса реализовать метод run() следующим образом:

public class MyRunnableTask implements Runnable {
     public void run() {
         // do stuff here
     }
}

И затем используйте его следующим образом:

Thread t = new Thread(new MyRunnableTask());
t.start();

Если у вас не было интерфейса Runnable, класс Thread, который отвечает за выполнение ваших действий в другом потоке, не имел бы обещания найти метод run() в вашем классе, чтобы вы могли получить ошибки. Вот почему вам нужно реализовать интерфейс.

Дополнительно: анонимный тип

Обратите внимание, что вам не нужно определять класс как обычно, вы можете сделать все это inline:

Thread t = new Thread(new Runnable() {
    public void run() {
        // stuff here
    }
});
t.start();

Это похоже на вышесказанное, только вы не создаете другой именованный класс.

Ответ 2

Runnable - это интерфейс, определенный так:

interface Runnable {
    public void run();
}

Чтобы создать класс, который его использует, просто определите класс как (public) class MyRunnable implements Runnable {

Его можно использовать, даже не создавая новую тему. Это в основном ваш основной интерфейс с помощью одного метода, run, который можно назвать.

Если вы создаете новый поток с runnable как его параметр, он вызовет метод запуска в новом потоке.

Следует также отметить, что Threads реализует Runnable, и это вызывается при создании нового потока (в новом потоке). Реализация по умолчанию просто вызывает любое Runnable, которое вы передали в конструкторе, поэтому вы можете просто сделать new Thread(someRunnable) без переопределения метода Thread run.