Создание потока в Java
Поток в Java - это объект, которому нужно описать, что
выполнять. Есть два привычных способа: унаследовать
Thread и переопределить run или передать
реализацию Runnable в конструктор Thread.
Наследование от Thread подходит для учебных
примеров, но в прикладном коде чаще берут Runnable:
задача отделена от механизма запуска, её проще тестировать
и передавать в пул потоков.
Класс-потомок Thread с переопределённым run:
class CounterThread extends Thread {
@Override
public void run() {
System.out.println("from " + getName());
}
}
Тот же смысл через Runnable и конструктор
Thread:
Runnable task = () -> System.out.println("from worker");
Thread worker = new Thread(task, "worker");
Имя потока задают вторым аргументом конструктора или
методом setName. Оно помогает читать логи и
отлаживать гонки.
Полный запуск с двумя способами создания (пока без ожидания, только создание объектов):
class CounterThread extends Thread {
@Override
public void run() {
System.out.println("from " + getName());
}
}
public class Main {
public static void main(String[] args) {
Thread byExtend = new CounterThread();
byExtend.setName("extend");
Runnable task = () -> System.out.println("runnable task");
Thread byRunnable = new Thread(task, "runnable");
System.out.println(byExtend.getName());
System.out.println(byRunnable.getName());
}
}
Создайте Thread с лямбдой, которая выводит
"ready", и задайте имя "prep".
В main выведите это имя, не вызывая пока start().