Говоря языком непрофессионала, что такое «запускаемое» в Java? Я изучаю AP-программирование в старшей школе, и мне поручено проводить исследования или выяснять у других, что такое «работоспособный» (мы только входим в ООП и еще не касались потоков).
Говоря языком непрофессионала, что такое «запускаемое» в Java? Я изучаю AP-программирование в старшей школе, и мне поручено проводить исследования или выяснять у других, что такое «работоспособный» (мы только входим в ООП и еще не касались потоков).
Ответы:
Runnable - это, по сути, тип класса (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метода.
new Thread(() -> System.out.println("hello from other thread")).start();
Runnable это интерфейс, определенный так:
interface Runnable {
public void run();
}
Чтобы создать класс, который его использует, просто определите класс как (public) class MyRunnable implements Runnable {
Его можно использовать даже без создания нового потока. По сути, это ваш базовый интерфейс с одним вызываемым методом run.
Если вы создадите новый поток с параметром runnable, он вызовет метод run в новом потоке.
Также следует отметить, что потоки реализуются Runnable, и это вызывается при создании нового потока (в новом потоке). Реализация по умолчанию просто вызывает любой Runnable, который вы передали в конструктор, поэтому вы можете просто обойтись new Thread(someRunnable)без переопределения runметода Thread .
Threadпул потоков, это сложно, и если вы не реализуете пул потоков, вы постоянно несете значительные затраты на создание новых потоков. Напротив, простая реализация Runnableозначает, что вы можете легко использовать такие вещи, как ThreadPoolExecutorServiceпул сторонних потоков.