Что такое «запускаемый» в Java, с точки зрения непрофессионала? Я изучаю программирование AP в старшей школе, чье задание состоит в том, чтобы проводить исследования или выяснять у других, что такое «работоспособный» (мы только начинаем заниматься ООП и еще не касались потоков).
В простом для понимания объяснении, что такое Runnable в Java?
Ответы (2)
Runnable — это в основном тип класса (Runnable — это интерфейс), который можно поместить в поток, описывая, что поток должен делать.
Выполняемый интерфейс требует от класса реализации метода run()
следующим образом :
public class MyRunnableTask implements Runnable {
public void run() {
// do stuff here
}
}
А затем используйте его следующим образом:
Thread t = new Thread(new MyRunnableTask());
t.start();
Если бы у вас не было интерфейса Runnable
, у класса Thread, отвечающего за выполнение ваших действий в другом потоке, не было бы обещания найти метод run()
в вашем классе, поэтому вы могли бы получить ошибки. Вот почему вам нужно реализовать интерфейс.
Дополнительно: анонимный тип
Обратите внимание, что вам не нужно определять класс, как обычно, вы можете сделать все это встроенным:
Thread t = new Thread(new Runnable() {
public void run() {
// stuff here
}
});
t.start();
Это похоже на предыдущее, только вы не создаете еще один именованный класс.
run
не завершится, после чего поток закрывается. Если вы хотите, чтобы поток выполнялся снова и снова, поместите цикл внутри метода run
.
- person opatut; 20.11.2014
new Thread(() -> System.out.println("hello from other thread")).start();
- person Gabe; 16.10.2018
Runnable
— это интерфейс, определенный следующим образом:
interface Runnable {
public void run();
}
Чтобы создать класс, который его использует, просто определите класс как (public) class MyRunnable implements Runnable {
Его можно использовать, даже не создавая новый поток. По сути, это ваш базовый интерфейс с единственным методом run, который можно вызвать.
Если вы создадите новый поток с runnable в качестве параметра, он вызовет метод запуска в новом потоке.
Следует также отметить, что потоки реализуют Runnable
, и это вызывается при создании нового потока (в новом потоке). Реализация по умолчанию просто вызывает любой Runnable, который вы передали конструктору, поэтому вы можете просто выполнить new Thread(someRunnable)
без переопределения метода run
Thread.
Thread
пул потоков, это сложно, и если вы не реализуете пулы потоков, вы несете значительные затраты на постоянное создание новых потоков. Напротив, простая реализация Runnable
означает, что вы можете легко использовать такие вещи, как ThreadPoolExecutorService
или сторонний пул потоков.
- person Stephen C; 11.11.2012