Thread.currentThread()
Возвращает поток, который выполняет текущий код.
Доступно с: Java 1.0
Синтаксис
public static Thread currentThread()Возвращаемое значение
ThreadОбъект Thread текущего потока.
Примеры
Имя и вид главного потока:
void main() {
Thread t = Thread.currentThread();
IO.println(t.getName());
IO.println(t.isVirtual());
}Результат:
main
falseВнутри задачи метод возвращает поток, в котором она выполняется:
void main() throws InterruptedException {
Thread worker = new Thread(
() -> IO.println("Running in " + Thread.currentThread().getName()), "worker-1");
worker.start();
worker.join();
Thread virtual = Thread.ofVirtual().start(
() -> IO.println("Virtual: " + Thread.currentThread().isVirtual()));
virtual.join();
}Результат:
Running in worker-1
Virtual: trueПримечания
Главное применение, кроме логов, — восстановить флаг прерывания: если вы поймали InterruptedException и не можете пробросить его дальше, вызовите Thread.currentThread().interrupt(). Номер потока возвращает threadId(). У виртуальных потоков имя по умолчанию пустое.
См. также
- Thread — Поток выполнения: позволяет программе делать несколько дел одновременно.
- Thread.ofVirtual() — Создаёт виртуальный поток — лёгкий поток, которых можно запустить миллионы.
- InterruptedException — Проверяемое исключение: ожидающий поток попросили прерваться.
- ScopedValue — Значение, доступное коду только на время вызова — например, текущий пользователь запроса. Замена ThreadLocal.
В учебнике
- Потоки выполнения — Потоки в Java — класс Thread, запуск через start, ожидание через join, Thread.sleep, имена потоков и непредсказуемый порядок выполнения.