Spec-Zone.ru › OpenJDK 21

Класс Thread

java.lang.Object
java.lang.Thread
Все реализованные интерфейсы:
Runnable
Прямые известные подклассы:
ForkJoinWorkerThread
public class Thread extends Object implements Runnable
Поток — это поток выполнения в программе. Виртуальная машина Java позволяет приложению иметь несколько потоков выполнения, работающих одновременно.

Thread определяет конструкторы и Thread.Builder для создания потоков. Запуск потока планирует выполнение его метода run. Новый запущенный поток выполняется параллельно с потоком, который его запустил.

Поток завершается, если либо его метод run выполняется нормально, либо если его метод run завершается внезапно, и соответствующий обработчик необработанных исключений обработчик исключений завершается нормально или внезапно. При отсутствии кода для выполнения поток завершает свою работу. Метод join может использоваться для ожидания завершения потока.

Потоки имеют уникальный идентификатор и имя. Идентификатор генерируется при создании потока и не может быть изменён. Имя потока может быть указано при создании потока или может быть изменено позже.

Потоки поддерживают переменные ThreadLocal. Это переменные, локальные для потока, то есть поток может иметь копию переменной, значение которой независимо от значения, установленного другими потоками. Thread также поддерживает переменные InheritableThreadLocal, которые являются локальными для потока, наследуемыми при создании потока от родительского Thread. Thread поддерживает специальную наследуемую локальную переменную для класса загрузчика контекста потока.

Потоки платформы

Thread поддерживает создание платформенных потоков, которые обычно отображаются 1:1 на потоки ядра, планируемые операционной системой. У платформных потоков обычно большая стек и другие ресурсы, которые поддерживаются операционной системой. Платформенные потоки подходят для выполнения всех типов задач, но могут быть ограниченным ресурсом.

Платформенные потоки по умолчанию получают автоматически сгенерированное имя потока.

Платформенные потоки обозначаются как демённые или не-демённые потоки. При запуске виртуальной машины Java обычно существует один не-демённый поток (поток, который обычно вызывает метод приложения main). Последовательность завершения работы начинается, когда все запущенные не-демённые потоки завершились. Незапущенные не-демённые потоки не препятствуют началу последовательности завершения работы.

В дополнение к статусу демёна, платформные потоки имеют приоритет потока и являются членами группы потоков.

Виртуальные потоки

Thread также поддерживает создание виртуальных потоков. Виртуальные потоки обычно являются потоками пользовательского режима, планируемыми Java-машиной исполнения, а не операционной системой. Виртуальные потоки обычно требуют мало ресурсов, и одна Java-машина может поддерживать миллионы виртуальных потоков. Виртуальные потоки подходят для выполнения задач, которые большую часть времени блокированы, часто ожидая завершения операций ввода-вывода. Виртуальные потоки не предназначены для длительных операций с интенсивным использованием ЦП.

Виртуальные потоки обычно используют небольшой набор платформных потоков, используемых в качестве потоков-носителей. Блокировки и операции ввода-вывода являются примерами операций, при которых поток-носитель может быть перепланирован из одного виртуального потока в другой. Код, выполняемый в виртуальном потоке, не осведомлен об используемом потоке-носителе. Метод currentThread(), используемый для получения ссылки на текущий поток, всегда вернёт объект Thread для виртуального потока.

Виртуальные потоки по умолчанию не имеют имени потока. Метод getName возвращает пустую строку, если имя потока не задано.

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

Создание и запуск потоков

Thread определяет публичные конструкторы для создания платформных потоков и метод start для планирования выполнения потоков. Thread может быть расширен для настройки и других расширенных целей, хотя большинство приложений в этом мало нуждаются.

Thread определяет API Thread.Builder для создания и запуска платформных и виртуальных потоков. Ниже приведены примеры с использованием этого API:

  Runnable runnable = ...

  // Start a daemon thread to run a task
  Thread thread = Thread.ofPlatform().daemon().start(runnable);

  // Create an unstarted thread with name "duke", its start() method
  // must be invoked to schedule it to execute.
  Thread thread = Thread.ofPlatform().name("duke").unstarted(runnable);

  // A ThreadFactory that creates daemon threads named "worker-0", "worker-1", ...
  ThreadFactory factory = Thread.ofPlatform().daemon().name("worker-", 0).factory();

  // Start a virtual thread to run a task
  Thread thread = Thread.ofVirtual().start(runnable);

  // A ThreadFactory that creates virtual threads
  ThreadFactory factory = Thread.ofVirtual().factory();

Наследование при создании потоков

Поток Thread наследует начальные значения переменных наследуемых локальных переменных (включая загрузчик класса контекста) от значений родительского потока на момент создания дочернего потока Thread. Конструктор с 5 параметрами конструктор можно использовать для создания потока, который не наследует начальные значения от создающего потока. При использовании Thread.Builder, метод inheritInheritableThreadLocals можно использовать для выбора, наследовать ли начальные значения.

Платформные потоки наследуют статус демёна, приоритет потока и, если не указано иначе (или если не выбран менеджер безопасности), группу потоков.

Создание платформного потока захватывает контекст вызывающего потока для ограничения разрешений нового потока при выполнении кода, выполняющего привилегированную операцию privileged action. Захваченный контекст вызывающего потока является "Наследованным AccessControlContext" нового потока. Создание виртуального потока не захватывает контекст вызывающего потока; виртуальные потоки не имеют разрешений при выполнении кода, выполняющего привилегированную операцию.

Если не указано иное, передача аргумента null в конструктор или метод в этом классе вызовет исключение NullPointerException.

Примечание по реализации:
В реализации JDK Reference Implementation планировщик виртуальных потоков может быть настроен с помощью следующих системных свойств:
Системные свойства
Системное свойство Описание
jdk.virtualThreadScheduler.parallelism Количество доступных платформных потоков для планирования виртуальных потоков. По умолчанию равно количеству доступных процессоров.
jdk.virtualThreadScheduler.maxPoolSize Максимальное количество платформных потоков, доступных планировщику. По умолчанию равно 256.
С:
1.0

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static interface  Thread.Builder
Построитель для объектов Thread и ThreadFactory.
static enum  Thread.State
Состояние потока.
static interface  Thread.UncaughtExceptionHandler
Интерфейс для обработчиков, вызываемых, когда Thread неожиданно завершается из-за необработанного исключения.

Краткое описание полей

Модификатор и тип Поле Описание
static final int MAX_PRIORITY
Максимальный приоритет потока.
static final int MIN_PRIORITY
Минимальный приоритет потока.
static final int NORM_PRIORITY
По умолчанию назначенный приоритет потока.

Краткое описание конструкторов

Конструктор Описание
Thread()
Инициализирует новый платформенный Thread.
Thread(Runnable task)
Инициализирует новый платформенный Thread.
Thread(Runnable task, String name)
Инициализирует новый платформенный Thread.
Thread(String name)
Инициализирует новый платформенный Thread.
Thread(ThreadGroup group, Runnable task)
Инициализирует новый платформенный Thread.
Thread(ThreadGroup group, Runnable task, String name)
Инициализирует новый платформенный Thread, используя task в качестве объекта run, указанное значение name в качестве имени и группу потоков, на которую ссылается group.
Thread(ThreadGroup group, Runnable task, String name, long stackSize)
Инициализирует новый платформенный Thread, используя task в качестве объекта run, указанное значение name в качестве имени, группу потоков, на которую ссылается group, и указанный размер стека.
Thread(ThreadGroup group, Runnable task, String name, long stackSize, boolean inheritInheritableThreadLocals)
Инициализирует новый платформенный Thread, используя task в качестве объекта run, указанное значение name в качестве имени, группу потоков, на которую ссылается group, указанное значение stackSize, и наследует начальные значения для переменных наследуемых потоковых локалей, если inheritThreadLocals имеет значение true.
Thread(ThreadGroup group, String name)
Инициализирует новый платформенный Thread.

Краткое описание методов

Модификатор и тип Метод Описание
static int activeCount()
Возвращает оценку количества активных потоков платформы в группе потоков текущего потока и его подгруппах.
final void checkAccess()
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод полезен только в сочетании с менеджером безопасности, который устарел и может быть удален в будущей версии.
protected Object clone()
Бросает CloneNotSupportedException, так как поток не может быть скопирован осмысленно.
int countStackFrames()
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально был предназначен для подсчета количества кадров стека, но результаты никогда не были четко определены и зависели от приостановки потоков.
static Thread currentThread()
Возвращает объект Thread для текущего потока.
static void dumpStack()
Выводит трассировку стека текущего потока в поток стандартной ошибки.
static int enumerate(Thread[] tarray)
Копирует в указанный массив каждый активный поток платформы в группе потоков текущего потока и его подгруппах.
static Map<Thread,StackTraceElement[]> getAllStackTraces()
Возвращает карту трассировок стека для всех активных потоков платформы.
ClassLoader getContextClassLoader()
Возвращает контекст ClassLoader для этого потока.
static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
Возвращает обработчик по умолчанию, вызываемый, когда поток внезапно завершается из-за необработанного исключения.
long getId()
Устаревший.
Этот метод не является final и может быть переопределён для возврата значения, которое не является идентификатором потока.
final String getName()
Возвращает имя этого потока.
final int getPriority()
Возвращает приоритет этого потока.
StackTraceElement[] getStackTrace()
Возвращает массив элементов трассировки стека, представляющий дамп стека этого потока.
Thread.State getState()
Возвращает состояние этого потока.
final ThreadGroup getThreadGroup()
Возвращает группу потоков потока или null , если поток завершен.
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
Возвращает обработчик, вызываемый, когда этот поток внезапно завершается из-за необработанного исключения.
static boolean holdsLock(Object obj)
Возвращает true тогда и только тогда, когда текущий поток удерживает мониторный замок на указанном объекте.
void interrupt()
Прерывает этот поток.
static boolean interrupted()
Проверяет, был ли прерван текущий поток.
final boolean isAlive()
Проверяет, жив ли этот поток.
final boolean isDaemon()
Проверяет, является ли этот поток демоном.
boolean isInterrupted()
Проверяет, был ли прерван этот поток.
final boolean isVirtual()
Возвращает true , если этот поток является виртуальным потоком.
final void join()
Ожидает завершения этого потока.
final void join(long millis)
Ожидает не более millis миллисекунд завершения этого потока.
final void join(long millis, int nanos)
Ожидает не более millis миллисекунд плюс nanos наносекунд завершения этого потока.
final boolean join(Duration duration)
Ожидает завершения этого потока в течение заданного интервала ожидания.
static Thread.Builder.OfPlatform ofPlatform()
Возвращает билдер для создания платформенного Thread или ThreadFactory , который создает платформенные потоки.
static Thread.Builder.OfVirtual ofVirtual()
Возвращает билдер для создания виртуального Thread или ThreadFactory , который создает виртуальные потоки.
static void onSpinWait()
Указывает, что вызывающий процесс временно не может продолжить выполнение до выполнения одного или нескольких действий со стороны других задач.
final void resume()
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально был задан для возобновления потока, приостановленного с помощью suspend().
void run()
Этот метод выполняется потоком при его выполнении.
void setContextClassLoader(ClassLoader cl)
Устанавливает контекст ClassLoader для этого потока.
final void setDaemon(boolean on)
Помечает этот поток как демоновый или не-демоновый поток.
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler ueh)
Устанавливает обработчик по умолчанию, вызываемый, когда поток внезапно завершается из-за необработанного исключения, и для этого потока не был определен другой обработчик.
final void setName(String name)
Изменяет имя этого потока на равное аргументу name.
final void setPriority(int newPriority)
Изменяет приоритет этого потока.
void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler ueh)
Устанавливает обработчик, вызываемый, когда этот поток внезапно завершается из-за необработанного исключения.
static void sleep(long millis)
Заставляет текущий выполняющийся поток спать (временно прекратить выполнение) на указанное количество миллисекунд, с учетом точности и точности системных таймеров и планировщиков.
static void sleep(long millis, int nanos)
Заставляет текущий выполняющийся поток спать (временно прекратить выполнение) на указанное количество миллисекунд плюс указанное количество наносекунд, с учетом точности и точности системных таймеров и планировщиков.
static void sleep(Duration duration)
Заставляет текущий выполняющийся поток спать (временно прекратить выполнение) на указанную продолжительность, с учетом точности и точности системных таймеров и планировщиков.
void start()
Планирует начало выполнения этого потока.
static Thread startVirtualThread(Runnable task)
Создает виртуальный поток для выполнения задачи и планирует его выполнение.
final void stop()
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально был задан для «остановки» целевого потока, заставляя целевой поток бросить ThreadDeath.
final void suspend()
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод изначально был задан для приостановки потока.
final long threadId()
Возвращает идентификатор этого потока Thread.
String toString()
Возвращает строковое представление этого потока.
static void yield()
Подсказка планировщику, что текущий поток готов уступить свое текущее использование процессора.

Методы, объявленные в классе java.lang.Object

equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Подробное описание полей

MIN_PRIORITY

public static final int MIN_PRIORITY
Минимальный приоритет, который может иметь поток.
См. также:
  • Значения константных полей

NORM_PRIORITY

public static final int NORM_PRIORITY
По умолчанию присваиваемый приоритет потоку.
См. также:
  • Значения константных полей

MAX_PRIORITY

public static final int MAX_PRIORITY
Максимальный приоритет, который может иметь поток.
См. также:
  • Значения константных полей

Подробное описание конструкторов

Thread

public Thread()
Инициализирует новый платформенный Thread. Этот конструктор имеет тот же эффект, что и Thread (null, null, gname), где gname — новое сгенерированное имя. Автоматически сгенерированные имена имеют вид "Thread-"+n, где n — целое число.

Этот конструктор полезен только при расширении Thread для переопределения метода run().

См. также:
  • Наследование при создании потоков

Thread

public Thread(Runnable task)
Инициализирует новый платформенный Thread. Этот конструктор имеет тот же эффект, что и Thread (null, task, gname), где gname — новое сгенерированное имя. Автоматически сгенерированные имена имеют вид "Thread-"+n, где n — целое число.

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

Thread.ofPlatform().unstarted(task); 
Параметры:
task - объект, метод run которого вызывается при запуске этого потока. Если null, метод run этого класса ничего не делает.
См. также:
  • Наследование при создании потоков

Thread

public Thread(ThreadGroup group, Runnable task)
Инициализирует новый платформенный Thread. Этот конструктор имеет тот же эффект, что и Thread (group, task, gname), где gname — новое сгенерированное имя. Автоматически сгенерированные имена имеют вид "Thread-"+n, где n — целое число.

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

Thread.ofPlatform().group(group).unstarted(task); 
Параметры:
group - группа потоков. Если null и есть менеджер безопасности, группа определяется методом SecurityManager.getThreadGroup(). Если менеджера безопасности нет или SecurityManager.getThreadGroup() возвращает null, группа устанавливается в текущую группу потоков.
task - объект, метод run которого вызывается при запуске этого потока. Если null, вызывается метод run этого потока.
Исключения:
SecurityException - если текущий поток не может создать поток в указанной группе потоков
См. также:
  • Наследование при создании потоков

Thread

public Thread(String name)
Инициализирует новый платформенный Thread. Этот конструктор имеет тот же эффект, что и Thread (null, null, name).

Этот конструктор полезен только при расширении Thread для переопределения метода run().

Параметры:
name - имя нового потока
См. также:
  • Наследование при создании потоков

Thread

public Thread(ThreadGroup group, String name)
Инициализирует новый платформенный Thread. Этот конструктор имеет тот же эффект, что и Thread (group, null, name).

Этот конструктор полезен только при расширении Thread для переопределения метода run().

Параметры:
group - группа потоков. Если null и есть менеджер безопасности, группа определяется методом SecurityManager.getThreadGroup(). Если менеджера безопасности нет или SecurityManager.getThreadGroup() возвращает null, группа устанавливается в текущую группу потоков.
name - имя нового потока
Исключения:
SecurityException - если текущий поток не может создать поток в указанной группе потоков
См. также:
  • Наследование при создании потоков

Thread

public Thread(Runnable task, String name)
Инициализирует новый платформенный Thread. Этот конструктор имеет тот же эффект, что и Thread (null, task, name).

Для непустой задачи и имени, вызов этого конструктора напрямую эквивалентен:

Thread.ofPlatform().name(name).unstarted(task); 
Параметры:
task - объект, метод run которого вызывается при запуске этого потока. Если null, вызывается метод run этого потока.
name - имя нового потока
См. также:
  • Наследование при создании потоков

Thread

public Thread(ThreadGroup group, Runnable task, String name)
Инициализирует новый платформенный Thread так, чтобы он использовал task в качестве объекта run, имел указанное name в качестве имени и принадлежал к группе потоков, указанной в group.

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

Кроме того, вызывается метод checkPermission с разрешением RuntimePermission("enableContextClassLoaderOverride") при вызове напрямую или косвенно конструктором подкласса, который переопределяет методы getContextClassLoader или setContextClassLoader.

Приоритет вновь созданного потока — меньший из приоритетов создающего его потока и максимального разрешённого приоритета группы потоков. Метод setPriority может использоваться для изменения приоритета на новое значение.

Новый поток изначально помечается как демон-поток тогда и только тогда, когда создающий его поток помечается как демон-поток. Метод setDaemon может использоваться для изменения статуса потока как демон-потока.

Для непустой группы, задачи и имени, вызов этого конструктора напрямую эквивалентен:

Thread.ofPlatform().group(group).name(name).unstarted(task); 
Параметры:
group - группа потоков. Если null и есть менеджер безопасности, группа определяется методом SecurityManager.getThreadGroup(). Если менеджера безопасности нет или SecurityManager.getThreadGroup() возвращает null, группа устанавливается в текущую группу потоков.
task - объект, метод run которого вызывается при запуске этого потока. Если null, вызывается метод run этого потока.
name - имя нового потока
Исключения:
SecurityException - если текущий поток не может создать поток в указанной группе потоков или не может переопределить методы загрузчика класса контекста.
См. также:
  • Наследование при создании потоков

Поток

public Thread(ThreadGroup group, Runnable task, String name, long stackSize)
Инициализирует новый платформенный Thread так, что у него task является объектом выполнения, у него указанное name в качестве имени, он принадлежит группе потоков, на которую ссылается group, и имеет указанный размер стека.

Этот конструктор идентичен конструктору Thread(ThreadGroup,Runnable,String) за исключением возможности указания размера стека потока. Размер стека — приблизительное количество байтов адресного пространства, которое виртуальная машина должна выделить для стека этого потока. Влияние параметра stackSize, если таковое имеется, сильно зависит от платформы.

На некоторых платформах, указание большего значения для параметра stackSize может позволить потоку достичь большей глубины рекурсии, прежде чем будет брошено исключение StackOverflowError. Аналогично, указание меньшего значения может позволить большему количеству потоков существовать одновременно без выброса исключения OutOfMemoryError (или другой внутренней ошибки). Подробности взаимосвязи значения параметра stackSize и максимальной глубины рекурсии и уровня одновременности зависят от платформы. На некоторых платформах значение параметра stackSize может вообще не иметь никакого эффекта.

Виртуальная машина свободна обрабатывать параметр stackSize как рекомендацию. Если указанное значение слишком мало для платформы, виртуальная машина может использовать некоторое платформа-зависимое минимальное значение; если указанное значение слишком велико, виртуальная машина может использовать некоторое платформа-зависимое максимальное значение. Аналогично, виртуальная машина свободна округлять указанное значение вверх или вниз по своему усмотрению (или игнорировать его полностью).

Указание значения нуля для параметра stackSize заставит этот конструктор вести себя точно так же, как конструктор Thread(ThreadGroup, Runnable, String).

Из-за зависимости поведения этого конструктора от платформы, при его использовании следует соблюдать особую осторожность. Размер стека потока, необходимый для выполнения заданного вычисления, вероятно, будет различаться в различных реализациях JRE. В свете этой вариативности может потребоваться тщательная настройка параметра размера стека, и настройка может потребоваться повторить для каждой реализации JRE, на которой будет выполняться приложение.

Примечание реализации: разработчикам платформы Java рекомендуется документировать поведение своей реализации по отношению к параметру stackSize.

Для группы, задачи и имени, отличных от null, вызов этого конструктора напрямую эквивалентен:

Thread.ofPlatform().group(group).name(name).stackSize(stackSize).unstarted(task); 
Параметры:
group - группа потоков. Если null и существует менеджер безопасности, группа определяется методом SecurityManager.getThreadGroup(). Если нет менеджера безопасности или SecurityManager.getThreadGroup() возвращает null, группа устанавливается в группу потоков текущего потока.
task - объект, метод run которого вызывается при запуске этого потока. Если null, вызывается метод run этого потока.
name - имя нового потока
stackSize - желаемый размер стека для нового потока или ноль, чтобы указать, что этот параметр следует игнорировать.
Исключения:
SecurityException - если текущий поток не может создать поток в указанной группе потоков
С тех пор:
1.4
См. также:
  • Наследование при создании потоков

Поток

public Thread(ThreadGroup group, Runnable task, String name, long stackSize, boolean inheritInheritableThreadLocals)
Инициализирует новый платформенный Thread так, что у него task является объектом выполнения, у него указанное name в качестве имени, он принадлежит группе потоков, на которую ссылается group, имеет указанный stackSize, и наследует начальные значения для передаваемых по наследству локальных переменных потока, если inheritThreadLocals равно true.

Этот конструктор идентичен конструктору Thread(ThreadGroup,Runnable,String,long) с добавленной возможностью подавления или отсутствия наследования начальных значений для передаваемых по наследству локальных переменных потока от создающего потока. Это позволяет более тонко управлять передаваемыми по наследству локальными переменными потока. Необходимо проявлять осторожность при передаче значения false для inheritThreadLocals, так как это может привести к неожиданному поведению, если новый поток выполняет код, который ожидает наследования конкретного значения локальной переменной потока.

Указание значения true для параметра inheritThreadLocals заставит этот конструктор вести себя точно так же, как конструктор Thread(ThreadGroup, Runnable, String, long).

Для группы, задачи и имени, отличных от null, вызов этого конструктора напрямую эквивалентен:

Thread.ofPlatform()
      .group(group)
      .name(name)
      .stackSize(stackSize)
      .inheritInheritableThreadLocals(inheritInheritableThreadLocals)
      .unstarted(task); 
Параметры:
group - группа потоков. Если null и существует менеджер безопасности, группа определяется методом SecurityManager.getThreadGroup(). Если нет менеджера безопасности или SecurityManager.getThreadGroup() возвращает null, группа устанавливается в группу потоков текущего потока.
task - объект, метод run которого вызывается при запуске этого потока. Если null, вызывается метод run этого потока.
name - имя нового потока
stackSize - желаемый размер стека для нового потока или ноль, чтобы указать, что этот параметр следует игнорировать
inheritInheritableThreadLocals - если true, наследует начальные значения для передаваемых по наследству локальных переменных потока от создающего потока, в противном случае начальные значения не наследуются
Исключения:
SecurityException - если текущий поток не может создать поток в указанной группе потоков
С тех пор:
9
См. также:
  • Наследование при создании потоков

Подробное описание методов

currentThread

public static Thread currentThread()
Возвращает объект Thread для текущего потока.
Возвращает:
текущий поток

yield

public static void yield()
Подсказка планировщику о том, что текущий поток готов уступить свой текущий доступ к процессору. Планировщик свободен игнорировать эту подсказку.

Yield — это эвристическая попытка улучшить относительное продвижение между потоками, которые в противном случае чрезмерно используют процессор. Его использование следует сочетать с подробным профилированием и бенчмаркингом, чтобы убедиться, что он действительно оказывает желаемый эффект.

Использование этого метода редко уместно. Он может быть полезен для отладки или тестирования, где он может помочь воспроизвести ошибки из-за гонок. Он также может быть полезен при проектировании конструкций управления параллелизмом, таких как те, что в пакете java.util.concurrent.locks.

sleep

public static void sleep(long millis) throws InterruptedException
Заставляет текущий исполняемый поток спать (временно прекратить выполнение) в течение заданного количества миллисекунд, с учетом точности и достоверности системных таймеров и планировщиков. Поток не теряет владения мониторами.
Параметры:
millis - длительность сна в миллисекундах
Исключения:
IllegalArgumentException - если значение millis отрицательное
InterruptedException - если какой-либо поток прервал текущий поток. Состояние прерывания текущего потока сбрасывается при возникновении этого исключения.

sleep

public static void sleep(long millis, int nanos) throws InterruptedException
Заставляет текущий исполняемый поток спать (временно прекратить выполнение) в течение заданного количества миллисекунд плюс заданного количества наносекунд, с учетом точности и достоверности системных таймеров и планировщиков. Поток не теряет владения мониторами.
Параметры:
millis - длительность сна в миллисекундах
nanos - 0-999999 дополнительные наносекунды сна
Исключения:
IllegalArgumentException - если значение millis отрицательное, или значение nanos не находится в диапазоне 0-999999
InterruptedException - если какой-либо поток прервал текущий поток. Состояние прерывания текущего потока сбрасывается при возникновении этого исключения.

sleep

public static void sleep(Duration duration) throws InterruptedException
Заставляет текущий исполняемый поток спать (временно прекратить выполнение) в течение указанного промежутка времени, с учетом точности и достоверности системных таймеров и планировщиков. Этот метод является пустой операцией, если промежуток времени отрицательный.
Параметры:
duration - длительность сна
Исключения:
InterruptedException - если текущий поток прерывается во время сна. Состояние прерывания текущего потока сбрасывается при возникновении этого исключения.
С тех пор:
19

onSpinWait

public static void onSpinWait()
Указывает, что вызывающий поток временно не может продолжить выполнение, до тех пор, пока не произойдёт одно или несколько действий со стороны других потоков. Вызывая этот метод в каждом цикле спин-ожидания, вызывающий поток сообщает исполняющей среде о том, что он ожидает. Исполняющая среда может принять меры для повышения производительности циклов спин-ожидания.
Примечание API:
В качестве примера рассмотрим метод в классе, который циклически ожидает, пока какой-либо флаг не будет установлен вне этого метода. Вызов метода onSpinWait должен быть помещён внутри цикла спин-ожидания.
    class EventHandler {
        volatile boolean eventNotificationNotReceived;
        void waitForEventAndHandleIt() {
            while ( eventNotificationNotReceived ) {
                Thread.onSpinWait();
            }
            readAndProcessEvent();
        }

        void readAndProcessEvent() {
            // Read event from some source and process it
             . . .
        }
    }

Приведённый код останется корректным даже если метод onSpinWait вообще не вызывается. Однако на некоторых архитектурах Java Virtual Machine может выдать процессору инструкции для более эффективного обращения с такими кодовыми шаблонами.

С тех пор как:
9

ofPlatform

public static Thread.Builder.OfPlatform ofPlatform()
Возвращает билдер для создания платформенного Thread или ThreadFactory, который создаёт платформенные потоки.

Взаимодействие с менеджером безопасности при создании платформенных потоков

При создании платформенного потока, когда установлен менеджер безопасности, вызывается метод менеджера безопасности checkAccess(ThreadGroup) с группой потоков. Если группа потоков не была установлена методом OfPlatform.group, то сначала вызывается метод менеджера безопасности getThreadGroup для выбора группы потоков. Если метод менеджера безопасности getThreadGroup возвращает null, то используется группа потоков потока, выполняющего построение.

Примечание API:
Ниже приведены примеры использования билдера:
  // Start a daemon thread to run a task
  Thread thread = Thread.ofPlatform().daemon().start(runnable);

  // Create an unstarted thread with name "duke", its start() method
  // must be invoked to schedule it to execute.
  Thread thread = Thread.ofPlatform().name("duke").unstarted(runnable);

  // A ThreadFactory that creates daemon threads named "worker-0", "worker-1", ...
  ThreadFactory factory = Thread.ofPlatform().daemon().name("worker-", 0).factory();
Возвращает:
Билдер для создания Thread или ThreadFactory объектов.
С тех пор как:
21

ofVirtual

public static Thread.Builder.OfVirtual ofVirtual()
Возвращает билдер для создания виртуального Thread или ThreadFactory, который создаёт виртуальные потоки.
Примечание API:
Ниже приведены примеры использования билдера:
  // Start a virtual thread to run a task.
  Thread thread = Thread.ofVirtual().start(runnable);

  // A ThreadFactory that creates virtual threads
  ThreadFactory factory = Thread.ofVirtual().factory();
Возвращает:
Билдер для создания Thread или ThreadFactory объектов.
С тех пор как:
21

clone

protected Object clone() throws CloneNotSupportedException
Бросает CloneNotSupportedException, так как поток не может быть осмысленно клонирован. Создайте новый поток вместо этого.
Переопределяет:
clone в классе Object
Возвращает:
клон этого экземпляра.
Бросает:
CloneNotSupportedException - всегда
См. также:
  • Cloneable

startVirtualThread

public static Thread startVirtualThread(Runnable task)
Создаёт виртуальный поток для выполнения задачи и планирует его для выполнения.

Этот метод эквивалентен:

Thread.ofVirtual().start(task); 
Параметры:
task - объект для выполнения, когда поток выполняется
Возвращает:
новый и запущенный виртуальный поток
С тех пор как:
21
См. также:
  • Наследование при создании потоков

isVirtual

public final boolean isVirtual()
Возвращает true, если этот поток является виртуальным. Виртуальный поток планируется Java Virtual Machine, а не операционной системой.
Возвращает:
true если этот поток является виртуальным
С тех пор как:
21

start

public void start()
Планирует запуск этого потока. Поток будет выполняться независимо от текущего потока.

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

Бросает:
IllegalThreadStateException - если поток уже запущен

run

public void run()
Этот метод выполняется потоком при его выполнении. Подклассы Thread могут переопределить этот метод.

Этот метод не предназначен для прямого вызова. Если этот поток является платформенным потоком, созданным с задачей Runnable, то вызов этого метода вызовет метод run задачи. Если этот поток является виртуальным, то прямой вызов этого метода ничего не делает.

Определяется в:
run в интерфейсе Runnable
Требования к реализации:
По умолчанию реализация выполняет задачу Runnable, с которой был создан Thread. Если поток был создан без задачи, этот метод ничего не делает.

stop

@Deprecated(since="1.2", forRemoval=true) public final void stop()
Устарело, подлежит удалению: Этот элемент API может быть удален в будущей версии.
Этот метод первоначально был предназначен для «остановки» целевого потока, вызывая у него исключение ThreadDeath. Он был изначально небезопасным. Остановка потока приводила к разблокировке всех мониторов, которые он заблокировал (как естественное следствие распространения исключения ThreadDeath вверх по стеку). Если какие-либо из объектов, ранее защищаемых этими мониторами, находились в несогласованном состоянии, повреждённые объекты становились видимыми для других потоков, что потенциально приводило к произвольному поведению. Использование stop должно быть заменено кодом, который просто изменяет какую-либо переменную, чтобы указать целевому потоку, что ему нужно прекратить выполнение. Целевой поток должен регулярно проверять эту переменную и возвращаться из своего метода run в упорядоченном виде, если переменная указывает на необходимость остановки. Если целевой поток ждёт в течение длительного времени (например, на переменной состояния), следует использовать метод interrupt для прерывания ожидания. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.
Бросает UnsupportedOperationException.
Бросает:
UnsupportedOperationException - всегда

interrupt

public void interrupt()
Прерывает этот поток.

Если текущий поток не прерывает сам себя (что всегда разрешено), вызывается метод checkAccess этого потока, что может вызвать исключение SecurityException.

Если этот поток заблокирован в вызове методов wait(), wait(long) или wait(long, int) класса Object, или методов join(), join(long), join(long, int), sleep(long) или sleep(long, int) этого класса, то его статус прерывания будет сброшен, и он получит исключение InterruptedException.

Если этот поток заблокирован в операции ввода-вывода над InterruptibleChannel, то канал будет закрыт, статус прерывания потока будет установлен, и поток получит исключение ClosedByInterruptException.

Если этот поток заблокирован в Selector, то статус прерывания потока будет установлен, и он немедленно вернётся из операции выбора, возможно, с ненулевым значением, так же как если бы был вызван метод wakeup селектора.

Если ни одно из предыдущих условий не выполняется, то статус прерывания этого потока будет установлен.

Прерывание потока, который не жив, может не иметь никакого эффекта.

Примечание реализации:
В реализации JDK Reference, прерывание потока, который не жив, всё ещё записывает запрос на прерывание и сообщит об этом через interrupted() и isInterrupted().
Бросает:
SecurityException - если текущий поток не может изменить этот поток

interrupted

public static boolean interrupted()
Проверяет, был ли прерван текущий поток. Статус прерывания потока сбрасывается этим методом. Другими словами, если этот метод вызывается дважды подряд, второй вызов вернёт false (если текущий поток не был прерван снова после того, как первый вызов сбросил его статус прерывания и до того, как второй вызов проверил его).
Возвращает:
true если текущий поток был прерван; false в противном случае.
См. также:
  • isInterrupted()

isInterrupted

public boolean isInterrupted()
Проверяет, был ли прерван этот поток. Статус прерывания потока не затрагивается этим методом.
Возвращает:
true если этот поток был прерван; false в противном случае.
См. также:
  • interrupted()

isAlive

public final boolean isAlive()
Проверяет, жив ли этот поток. Поток жив, если он был запущен и еще не завершен.
Возвращает:
true если этот поток жив; false в противном случае.

suspend

@Deprecated(since="1.2", forRemoval=true) public final void suspend()
Устарело, подлежит удалению: Этот элемент API может быть удален в будущей версии.
Этот метод изначально был предназначен для приостановки потока. Он был подвержен тупиковым ситуациям. Если целевой поток удерживал блокировку на мониторе, защищающем критический системный ресурс, во время приостановки, ни один поток не мог получить доступ к ресурсу до возобновления целевого потока. Если поток, намеревающийся возобновить целевой поток, попытался заблокировать монитор до вызова resume, произошла бы тупиковая ситуация. Такие тупики обычно проявлялись как «зависшие» процессы. Дополнительную информацию см. в Почему Thread.stop, Thread.suspend и Thread.resume устарели?.
Бросает UnsupportedOperationException.
Бросает:
UnsupportedOperationException — всегда

resume

@Deprecated(since="1.2", forRemoval=true) public final void resume()
Устарело, подлежит удалению: Этот элемент API может быть удален в будущей версии.
Этот метод изначально был предназначен для возобновления потока, приостановленного с помощью suspend(). Приостановка потока была подвержена тупиковым ситуациям. Дополнительную информацию см. в Почему Thread.stop, Thread.suspend и Thread.resume устарели?.
Бросает UnsupportedOperationException.
Бросает:
UnsupportedOperationException — всегда

setPriority

public final void setPriority(int newPriority)
Изменяет приоритет этого потока. Для платформных потоков приоритет устанавливается как меньшее значение из заданного newPriority и максимального разрешенного приоритета группы потоков данного потока. Приоритет виртуального потока всегда равен NORM_PRIORITY, и newPriority игнорируется.
Параметры:
newPriority — новый приоритет потока
Бросает:
IllegalArgumentException — если приоритет не находится в диапазоне от MIN_PRIORITY до MAX_PRIORITY.
SecurityException — если checkAccess() определяет, что текущий поток не может изменить этот поток
См. также:
  • setPriority(int)
  • ThreadGroup.getMaxPriority()

getPriority

public final int getPriority()
Возвращает приоритет этого потока.

Приоритет виртуального потока всегда равен NORM_PRIORITY.

Возвращает:
приоритет этого потока.
См. также:
  • setPriority(int)

setName

public final void setName(String name)
Изменяет имя этого потока на значение аргумента name.

Сначала вызывается метод checkAccess этого потока без аргументов. Это может привести к выбрасыванию SecurityException.

Примечание для реализации:
В реализации JDK Reference Implementation, если этот поток является текущим потоком и это платформный поток, который не был присоединён к JVM с помощью функции Java Native Interface AttachCurrentThread, то этот метод установит имя потока операционной системы. Это может быть полезно для отладки и устранения неполадок.
Параметры:
name — новое имя для этого потока.
Бросает:
SecurityException — если текущий поток не может изменить этот поток.
Внешние спецификации
  • Спецификация Java Native Interface
См. также:
  • getName()
  • checkAccess()

getName

public final String getName()
Возвращает имя этого потока.
Возвращает:
имя этого потока.
См. также:
  • setName(String)

getThreadGroup

public final ThreadGroup getThreadGroup()
Возвращает группу потоков потока или null , если поток завершен.

Группа потоков, возвращённая для виртуального потока, — специальная Группа потоков для виртуальных потоков.

Возвращает:
группу потоков этого потока или null

activeCount

public static int activeCount()
Возвращает оценку количества активных платформных потоков в группе потоков текущего потока и её подгруппах. Виртуальные потоки не учитываются в оценке.

Возвращаемое значение — лишь оценка, так как количество потоков может динамически изменяться во время обхода внутренних структур данных и может быть повлияно наличием определённых системных потоков. Этот метод предназначен в основном для целей отладки и мониторинга.

Возвращает:
оценку количества активных платформных потоков в группе потоков текущего потока и в любой другой группе потоков, у которой группа потоков текущего потока является предком

enumerate

public static int enumerate(Thread[] tarray)
Копирует в указанный массив все активные платформенные потоки в группе потоков текущего потока и её подгруппах. Этот метод просто вызывает метод ThreadGroup.enumerate(Thread[]) группы потоков текущего потока. Виртуальные потоки этим методом не перечисляются.

Приложение может использовать метод activeCount для оценки необходимого размера массива, однако если массив слишком короткий для размещения всех потоков, дополнительные потоки будут молча проигнорированы. Если важно получить каждый активный поток в группе потоков текущего потока и её подгруппах, вызывающий должен проверить, что возвращаемое значение int строго меньше длины tarray.

Из-за присущей этому методу гонки потоков рекомендуется использовать его только для целей отладки и мониторинга.

Параметры:
tarray — массив, в который нужно поместить список потоков
Возвращает:
количество потоков, помещённых в массив
Бросает:
SecurityException — если ThreadGroup.checkAccess() определяет, что текущий поток не может получить доступ к своей группе потоков

countStackFrames

@Deprecated(since="1.2", forRemoval=true) public int countStackFrames()
Устарело, подлежит удалению: Этот элемент API может быть удален в будущей версии.
Этот метод изначально был предназначен для подсчёта количества кадров стека, но результаты никогда не были хорошо определены и зависели от приостановки потоков. Этот метод может быть удалён в будущей версии Java SE.
Бросает UnsupportedOperationException.
Возвращает:
ничего
См. также:
  • StackWalker

join

public final void join(long millis) throws InterruptedException
Ожидает не более millis миллисекунд, пока этот поток завершится. Значение таймаута 0 означает ожидание бесконечно. Этот метод возвращается немедленно без ожидания, если поток не был started.
Примечание для реализации:
Для платформных потоков реализация использует цикл вызовов this.wait с условием this.isAlive. При завершении потока вызывается метод this.notifyAll. Рекомендуется приложениям не использовать wait, notify, или notifyAll на экземплярах Thread.
Параметры:
millis — время ожидания в миллисекундах
Бросает:
IllegalArgumentException — если значение millis отрицательно
InterruptedException — если какой-либо поток прервал текущий поток. Статус прерывания текущего потока сбрасывается при возникновении этого исключения.

join

public final void join(long millis, int nanos) throws InterruptedException
Ожидает не более millis миллисекунд плюс nanos наносекунд, пока этот поток не завершится. Если оба аргумента равны 0, это означает ожидание бесконечно. Этот метод возвращается немедленно, без ожидания, если поток ещё не был started.
Описание реализации:
Для платформных потоков реализация использует цикл this.wait вызовов, условленных this.isAlive. По завершении потока вызывается метод this.notifyAll. Рекомендуется, чтобы приложения не использовали wait, notify, или notifyAll для экземпляров Thread.
Параметры:
millis - время ожидания в миллисекундах
nanos - дополнительные наносекунды ожидания 0-999999
Исключения:
IllegalArgumentException - если значение millis отрицательно, или значение nanos не находится в диапазоне 0-999999.
InterruptedException - если какой-либо поток прервал текущий поток. Статус прерывания текущего потока сбрасывается при возникновении этого исключения.

join

public final void join() throws InterruptedException
Ожидает завершения этого потока.

Вызов этого метода ведет себя точно так же, как и вызов

join(0)
Исключения:
InterruptedException - если какой-либо поток прервал текущий поток. Статус прерывания текущего потока сбрасывается при возникновении этого исключения.

join

public final boolean join(Duration duration) throws InterruptedException
Ожидает завершения этого потока в течение заданного времени ожидания.

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

Параметры:
duration - максимальное время ожидания
Возвращает:
true если поток завершился, false если поток не завершился
Исключения:
InterruptedException - если текущий поток прерван во время ожидания. Статус прерывания текущего потока сбрасывается при возникновении этого исключения.
IllegalThreadStateException - если этот поток не был запущен.
С:
19

dumpStack

public static void dumpStack()
Выводит трассировку стека текущего потока в поток стандартной ошибки. Этот метод полезен для отладки.

setDaemon

public final void setDaemon(boolean on)
Помечает этот поток как демоновый или не-демоновый поток. Последовательность завершения запускается, когда все запущенные не-демонные потоки завершаются.

Статус демона виртуального потока всегда true и не может быть изменён этим методом на false.

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

Параметры:
on - если true, помечает этот поток как демонический поток
Исключения:
IllegalArgumentException - если это виртуальный поток и on равно false
IllegalThreadStateException - если этот поток активен
SecurityException - если checkAccess() определяет, что текущий поток не может изменить этот поток

isDaemon

public final boolean isDaemon()
Проверяет, является ли этот поток демоническим. Статус демона виртуального потока всегда true.
Возвращает:
true если этот поток является демоническим; false в противном случае.
См. также:
  • setDaemon(boolean)

checkAccess

@Deprecated(since="17", forRemoval=true) public final void checkAccess()
Устарело, для удаления: Этот элемент API может быть удален в будущей версии.
Этот метод полезен только в сочетании с Security Manager, который устарел и может быть удалён в будущей версии. Следовательно, этот метод также устарел и может быть удалён. Замены Security Manager или этого метода нет.
Определяет, имеет ли текущий поток разрешение на изменение этого потока.

Если существует менеджер безопасности, вызывается его метод checkAccess с этим потоком в качестве аргумента. Это может привести к выбросу SecurityException.

Исключения:
SecurityException - если текущий поток не имеет разрешения на доступ к этому потоку.
См. также:
  • SecurityManager.checkAccess(Thread)

toString

public String toString()
Возвращает строковое представление этого потока. Строковое представление обычно включает идентификатор и имя потока. В реализации для платформных потоков включается идентификатор, имя, приоритет потока и имя группы потоков.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление этого потока.

getContextClassLoader

public ClassLoader getContextClassLoader()
Возвращает контекстный ClassLoader для этого потока. Контекстный ClassLoader может быть установлен создателем потока для использования кодом, выполняющимся в этом потоке, при загрузке классов и ресурсов. Если не установлен, по умолчанию используется контекстный загрузчик родительского потока.

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

Возвращает:
контекстный ClassLoader для этого потока или null указывающий на системный загрузчик классов (или, в случае его отсутствия, загрузчик начальной загрузки)
Исключения:
SecurityException - если менеджер безопасности присутствует, и загрузчик классов вызывающего не null и не идентичен или не является предком контекстного загрузчика классов, и у вызывающего нет разрешения RuntimePermission("getClassLoader")
С:
1.2

setContextClassLoader

public void setContextClassLoader(ClassLoader cl)
Устанавливает контекстный ClassLoader для этого потока.

Контекстный ClassLoader может быть установлен создателем потока для использования кодом, выполняющимся в этом потоке, при загрузке классов и ресурсов.

Если менеджер безопасности присутствует, вызывается его метод checkPermission с разрешением RuntimePermission ("setContextClassLoader") для проверки разрешения на установку контекстного загрузчика классов.

Параметры:
cl - контекстный загрузчик классов для этого потока или null, указывающий на системный загрузчик классов (или, в случае его отсутствия, загрузчик начальной загрузки)
Исключения:
SecurityException - если текущий поток не может установить контекстный загрузчик классов
С:
1.2

holdsLock

public static boolean holdsLock(Object obj)
Возвращает true тогда и только тогда, когда текущий поток владеет мониторным замком на указанном объекте.

Этот метод разработан для того, чтобы программа могла утверждать, что текущий поток уже владеет указанным замком:

     assert Thread.holdsLock(obj);
 
Параметры:
obj - объект, для которого необходимо проверить владение замком
Возвращает:
true если текущий поток владеет мониторным замком на указанном объекте.
С:
1.4

getStackTrace

public StackTraceElement[] getStackTrace()
Возвращает массив элементов трассировки стека, представляющих дамп стека этого потока. Этот метод вернёт массив нулевой длины, если этот поток не был запущен, запущен, но ещё не был запланирован к выполнению системой, или завершен. Если возвращаемый массив ненулевой длины, то первый элемент массива представляет вершину стека, что является последним вызовом метода в последовательности. Последний элемент массива представляет основание стека, что является наименее недавним вызовом метода в последовательности.

Если есть менеджер безопасности, и этот поток не является текущим, то вызывается метод менеджера безопасности checkPermission с разрешением RuntimePermission("getStackTrace") для проверки разрешения на получение трассировки стека.

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

Возвращает:
массив StackTraceElement, каждый представляет один кадр стека.
Исключения:
SecurityException - если менеджер безопасности существует и его метод checkPermission не разрешает получение трассировки стека потока.
С:
1.5
См. также:
  • Throwable.getStackTrace()

getAllStackTraces

public static Map<Thread,StackTraceElement[]> getAllStackTraces()
Возвращает карту трассировок стека для всех активных потоков платформы. Карта не включает виртуальные потоки. Ключами карты являются потоки, а значениями — массивы StackTraceElement, представляющие дамп стека соответствующего Thread. Возвращаемые трассировки стека имеют формат, указанный для метода getStackTrace.

Потоки могут выполняться во время вызова этого метода. Трассировка стека каждого потока представляет собой только моментальный снимок, и каждая трассировка стека может быть получена в разное время. Массив нулевой длины будет возвращён в значении карты, если виртуальная машина не имеет информации о трассировке стека для данного потока.

Если существует менеджер безопасности, то вызывается метод checkPermission менеджера безопасности с разрешением RuntimePermission("getStackTrace"), а также разрешением RuntimePermission("modifyThreadGroup"), чтобы проверить, разрешено ли получение трассировки стека всех потоков.

Returns:
a Map от Thread до массива StackTraceElement, представляющего трассировку стека соответствующего потока.
Throws:
SecurityException - если существует менеджер безопасности, и его метод checkPermission не позволяет получить трассировку стека потока.
Since:
1.5
See Also:
  • getStackTrace()
  • Throwable.getStackTrace()

getId

@Deprecated(since="19") public long getId()
Deprecated.
Этот метод не является final и может быть переопределён, чтобы вернуть значение, отличное от идентификатора потока. Используйте threadId() вместо этого.
Возвращает идентификатор этого потока. Идентификатор потока — положительное long число, сгенерированное при создании этого потока. Идентификатор потока уникален и остается неизменным в течение всего его жизненного цикла.
Returns:
Идентификатор этого потока
Since:
1.5

threadId

public final long threadId()
Возвращает идентификатор этого потока. Идентификатор потока — положительное long число, сгенерированное при создании этого потока. Идентификатор потока уникален и остается неизменным в течение всего его жизненного цикла.
Returns:
Идентификатор этого потока
Since:
19

getState

public Thread.State getState()
Возвращает состояние этого потока. Этот метод предназначен для использования при мониторинге состояния системы, а не для управления синхронизацией.
Returns:
Состояние этого потока.
Since:
1.5

setDefaultUncaughtExceptionHandler

public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler ueh)
Устанавливает обработчик по умолчанию, вызываемый, когда поток неожиданно завершается из-за необработанного исключения, и ни один другой обработчик для этого потока не был определён.

Обработка необработанных исключений контролируется сначала потоком, затем объектом ThreadGroup потока, а затем обработчиком необработанных исключений по умолчанию. Если у потока нет явного обработчика необработанных исключений, и группа потоков потока (включая родительские группы потоков) не специализирует свой метод uncaughtException, то вызывается метод uncaughtException обработчика по умолчанию.

Установив обработчик необработанных исключений по умолчанию, приложение может изменить способ обработки необработанных исключений (например, ведение журнала в определённое устройство или файл) для тех потоков, которые уже принимали бы какое-либо «по умолчанию» поведение, предоставляемое системой.

Обратите внимание, что обработчик необработанных исключений по умолчанию обычно не должен обращаться к объекту ThreadGroup потока, так как это может привести к рекурсии бесконечной длины.

Parameters:
ueh - объект, который нужно использовать в качестве обработчика необработанных исключений по умолчанию. Если null, обработчика по умолчанию нет.
Throws:
SecurityException - если присутствует менеджер безопасности, и он отказывается предоставить RuntimePermission("setDefaultUncaughtExceptionHandler")
Since:
1.5
See Also:
  • setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
  • getUncaughtExceptionHandler()
  • ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)

getDefaultUncaughtExceptionHandler

public static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
Возвращает обработчик по умолчанию, вызываемый, когда поток неожиданно завершается из-за необработанного исключения. Если возвращаемое значение null, обработчика по умолчанию нет.
Returns:
обработчик необработанных исключений по умолчанию для всех потоков
Since:
1.5
See Also:
  • setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)

getUncaughtExceptionHandler

public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
Возвращает обработчик, вызываемый, когда этот поток неожиданно завершается из-за необработанного исключения. Если у этого потока нет явно заданного обработчика необработанных исключений, то возвращается объект ThreadGroup этого потока, за исключением случаев, когда этот поток завершён, в таком случае возвращается null.
Returns:
обработчик необработанных исключений для этого потока
Since:
1.5

setUncaughtExceptionHandler

public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler ueh)
Устанавливает обработчик, вызываемый, когда этот поток неожиданно завершается из-за необработанного исключения.

Поток может полностью контролировать реакцию на необработанные исключения, явно задав свой обработчик необработанных исключений. Если такой обработчик не задан, то объект ThreadGroup потока выполняет роль его обработчика.

Parameters:
ueh - объект, который нужно использовать в качестве обработчика необработанных исключений этого потока. Если null, у этого потока нет явного обработчика.
Throws:
SecurityException - если текущий поток не имеет права изменить этот поток.
Since:
1.5
See Also:
  • setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
  • ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Thread.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API