Топ-100Многопоточность в Java. создание и запуск потоков с помощью Thread - CodOrbits
LogoCodOrbits

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

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

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

Многопоточность в Java. создание и запуск потоков с помощью Thread

Last updated: 6 мая 2025 г.

Создать нить(поток) можно тремя способами:

  • расширяя Thread;
  • реализуя Runnable;
  • расширяя Callable;

Код класса расширяющего или реализующего что-нибудь выше перечисленное будет выполняться в отдельном потоке.

Мы уже затрагивали создание потоков когда рассматривали PipedOutputStream. И мы помним, что там было два потока и код одного потока выполнялся параллельно коду другого.

Поэтому суть потоков думаю понятна. Параллельное выполнение блоков кода друг другу.


Расширение Thread

Ниже в примере класс MyThread расширяет Thread.

Это значит, что в нем должен быть переопределен метод run.

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

То есть он будет выполняться параллельно другому коду, например тому, в котором выполняется код метода мейн.

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

1class MyThread extends Thread {
2    @Override
3    public void run() {
4        System.out.println("run() method ");
5    }
6}
7
8public class ExtendsThread {
9    public static void main(String[] args) {
10        //В отличие от реализации Runnable (разберем
11        //в следующем уроке) для каждого потока класса
12        //расширяющего Thread необходимо создавать новый
13        //объект. Создаются три новых объекта MyThread
14        //как можно увидеть
15        MyThread t1 = new MyThread();
16        MyThread t2 = new MyThread();
17        MyThread t3 = new MyThread();
18        //Теперь с помощью метода start в одном потоке
19        //запускается выполнение метода run у объекта t1,
20        //в другом потоке запускается выполнение метода
21        //run у объекта t2 и в третьем потоке запускается
22        //выполнение метода run у объекта t3.
23        //И ясное дело все эти потоки выполняются
24        //параллельно друг другу.
25        t1.start();
26        t2.start();
27        t3.start();
28    }
29}

Вывод:

Каждый поток вывел по строке как видим.


Преимущества расширения Thread

Основное преимущество расширения Thread в том, что есть возможность переопределять не только run(), но и другие методы, такие как start().

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

1class MyThread extends Thread {
2    @Override
3    public void start() {
4        System.out.println("Overriding a start() method");
5        super.start();
6    }
7
8    @Override
9    public void run() {
10        System.out.println("run() method ");
11    }
12}
13
14public class ExtendsThread {
15    public static void main(String[] args) {
16        MyThread t1 = new MyThread();
17        MyThread t2 = new MyThread();
18        MyThread t3 = new MyThread();
19        t1.start();
20        t2.start();
21        t3.start();
22    }
23}

Вывод:

Как видим, теперь и при вызове start тоже выводиться строка.

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


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

Официальная документация по классу Thread

Additional Material Icon
Divider

Сравнение Thread, Runnable и Callable на Stack Overflow

Additional Material Icon
Divider

Основы многопоточности от Jenkov

Additional Material Icon

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

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

10
мин.

Similar Articles Icon
Divider

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

9
мин.

Similar Articles Icon
Divider

Метод join в Java

11
мин.

Similar Articles Icon