РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
989 of 1163 menu

Класс Runnable

Класс Runnable - это функциональный интерфейс из пакета java.lang, который представляет собой задачу, предназначенную для выполнения в отдельном потоке. Он содержит единственный метод run, в котором описывается код, выполняемый потоком. Объект Runnable передается в конструктор класса Thread или в метод execute исполнителя ExecutorService. Поскольку интерфейс функциональный, его можно реализовать с помощью лямбда-выражения или ссылки на метод.

Синтаксис

@FunctionalInterface public interface Runnable { void run(); }

Пример

Давайте создадим задачу через анонимный класс и запустим ее в отдельном потоке:

public class Main { public static void main(String[] args) { Runnable task = new Runnable() { @Override public void run() { System.out.println("task is running"); } }; Thread thread = new Thread(task); thread.start(); } }

Результат выполнения кода:

"task is running"

Пример

Так как Runnable - функциональный интерфейс, ту же задачу можно записать короче через лямбда-выражение:

public class Main { public static void main(String[] args) { Runnable task = () -> System.out.println("task is running"); Thread thread = new Thread(task); thread.start(); } }

Результат выполнения кода:

"task is running"

Пример

Давайте передадим Runnable напрямую в конструктор потока без промежуточной переменной:

public class Main { public static void main(String[] args) { Thread thread = new Thread(() -> { for (int i = 1; i <= 3; i++) { System.out.println("step " + i); } }); thread.start(); } }

Результат выполнения кода:

"step 1" "step 2" "step 3"

Пример

Давайте запустим несколько задач Runnable в пуле потоков через ExecutorService:

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(2); Runnable task = () -> System.out.println( Thread.currentThread().getName() + " works" ); executor.execute(task); executor.execute(task); executor.shutdown(); } }

Результат выполнения кода:

"pool-1-thread-1 works" "pool-1-thread-2 works"

Смотрите также

  • метод run,
    который содержит код выполняемой задачи
  • класс Callable,
    который возвращает результат выполнения
  • класс Thread,
    который запускает задачу в отдельном потоке
  • метод start,
    который запускает поток на выполнение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить