Топ-100Интерфейс Runnable в Java - CodOrbits
LogoCodOrbits

Раздел: Многопоточность

В этом разделе вы узнаете, как использовать многопоточность в Java для повышения производительности и параллельной обработки.

Все разделы
Иконка Многопоточность

Интерфейс Runnable в Java

Last updated: 6 мая 2025 г.

Реализуя Runnable тоже реализуется метод run в котором пишется код, который будет выполняться в отдельном потоке.

Пример программы:

1//Создадим простенький класс.
2//Дальше поясним зачем он.
3class Friend {
4    public static void m1() {
5        System.out.println("Hello Friend!!!");
6    }
7}
8
9//Также можно увидеть что мы реализуем не только
10//Runnable но и расширяем Friend. Это преимущество
11//реализации Runnable перед расширением Thread
12//так как в Java можно расширять Лишь Один класс
13//и если бы мы расширили Thread то расширить
14//какой либо другой класс (например Friend)
15//уже не имели бы возможности.
16class MyThread extends Friend implements Runnable {
17    int i=0;
18    public void run() {
19        i++;
20        m1();
21    }
22}
23
24class RunnableExample {
25    public static void main(String[] args) {
26        //создаем один объект MyThread.
27        MyThread MyThr = new MyThread();
28        //Можно у одного объекта
29        //в отдельных потоках запускать его метод run
30        //это преимущество Runnable перед Thread.
31        //Подробнее на следующей странице.
32        Thread t1 = new Thread(MyThr);//передается в поток
33        Thread t2 = new Thread(MyThr);//передается в поток 2 раз
34        //run объекта MyThr запускается
35        //в отдельных потоках t1 и t2.
36        t1.start();
37        t2.start();
38        //Еще одно преимущество Runnable перед Thread
39        //что код класса реализующего Runnable можно
40        //использовать вне в отдельном потоке.
41        //То есть m1 просто выполнится здесь в потоке метода main
42        MyThr.m1();
43        //В конце можно увидеть 2. То есть оба потока работали
44        //с одним и тем же объектом.
45        //Все потоки добавили 1 к полю i объекта MyThr.
46        System.out.println(MyThr.i);
47    }
48}

Вывод:

В консоли можно увидеть 2. То есть оба потока работали с одним и тем же объектом. Все потоки добавляли 1 к полю i объекта MyThr.


Преимущества реализации Runnable

Преимущества реализации Runnable перед расширением Thread:

1. Реализуя Runnable можно создать всего 1 объект и передавать в потоки для параллельного выполнения, в отличие от расширения thread, где для каждого потока необходимо создавать отдельный объект класса, который расширяет Thread.

То есть мы видели в прошлом уроке:

MyThread t1 = new MyThread();

MyThread t2 = new MyThread();

MyThread t3 = new MyThread();

Search Icon

Следовательно реализуя Runnable можно сэкономить память, не создавая кучу объектов.

Также нужно помнить, что раз все потоки работают с одним объектом, то они работают с одними и теми же самыми полями этого одного объекта.

2. Код класса реализующего Runnable можно использовать не в потоке. Объект можно передать не только в Thread, а и, например, в ExecutorService

3. Расширяя Thread нет возможности расширить класс расширяющий Thread еще раз, так как в java нет множ. насл.


Следующие уроки

Volatile переменная в Java

9
мин.

Similar Articles Icon
Divider

Метод join в Java

11
мин.

Similar Articles Icon
Divider

Синхронизация в Java с помощью Synchronized

13
мин.

Similar Articles Icon