Spec-Zone.ru › OpenJDK 8

Класс Thread

  • java.lang.Object
    • java.lang.Thread
Все реализованные интерфейсы:
Runnable
Непосредственные известные подклассы:
ForkJoinWorkerThread

public class Thread
extends Object
implements Runnable

Поток — это поток выполнения в программе. Java Virtual Machine позволяет приложению иметь несколько потоков выполнения, работающих одновременно.

Каждый поток имеет приоритет. Потоки с более высоким приоритетом выполняются в предпочтительном порядке перед потоками с более низким приоритетом. Каждый поток может быть или не быть помечен как демон. Когда код, выполняемый в некотором потоке, создаёт новый Thread объект, приоритет нового потока изначально устанавливается равным приоритету создающего потока, и новый поток является демон-потоком тогда и только тогда, когда создающий поток является демон-потоком.

Когда запускается Java Virtual Machine, обычно существует один не-демон-поток (который обычно вызывает метод, названный main в некотором назначенном классе). Java Virtual Machine продолжает выполнять потоки, пока не произойдёт одно из следующих:

  • Метод exit класса Runtime был вызван, и менеджер безопасности разрешил операцию выхода.
  • Все потоки, которые не являются демон-потоками, умерли, либо вернувшись из вызова метода run, либо сбросив исключение, которое распространяется за пределы метода run.

Существует два способа создания нового потока выполнения. Один способ — объявить класс подклассом Thread. Этот подкласс должен переопределить метод run класса Thread. Затем экземпляр подкласса может быть выделен и запущен. Например, поток, который вычисляет простые числа, большие, чем указанное значение, можно написать следующим образом:

class PrimeThread extends Thread {
    long minPrime;
    PrimeThread(long minPrime) {
        this.minPrime = minPrime;
    }

    public void run() {
        // compute primes larger than minPrime
         . . .
    }
}

Следующий код затем создаст поток и запустит его:

PrimeThread p = new PrimeThread(143);
p.start();

Другой способ создания потока — объявить класс, который реализует интерфейс Runnable. Этот класс затем реализует метод run. Затем экземпляр класса может быть выделен, передан в качестве аргумента при создании Thread, и запущен. Тот же пример в другом стиле выглядит следующим образом:

class PrimeRun implements Runnable {
    long minPrime;
    PrimeRun(long minPrime) {
        this.minPrime = minPrime;
    }

    public void run() {
        // compute primes larger than minPrime
         . . .
    }
}

Следующий код затем создаст поток и запустит его:

PrimeRun p = new PrimeRun(143);
new Thread(p).start();

Каждый поток имеет имя для целей идентификации. Несколько потоков могут иметь одинаковое имя. Если имя не указано при создании потока, для него генерируется новое имя.

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

С:
JDK1.0
См. также:
Runnable, Runtime.exit(int), run(), stop()

Вложенные классы

Модификатор и тип Класс и описание
static class  Thread.State

Состояние потока.

static interface  Thread.UncaughtExceptionHandler

Интерфейс для обработчиков, вызываемых, когда Thread прерывается из-за необработанного исключения.

Поля

Модификатор и тип Поле и описание
static int MAX_PRIORITY

Максимальный приоритет, который может иметь поток.

static int MIN_PRIORITY

Минимальный приоритет, который может иметь поток.

static int NORM_PRIORITY

Приоритет по умолчанию, который назначается потоку.

Конструкторы

Конструктор и описание
Thread()

Выделяет новый объект Thread.

Thread(Runnable target)

Выделяет новый объект Thread.

Thread(Runnable target, String name)

Выделяет новый объект Thread.

Thread(String name)

Выделяет новый объект Thread.

Thread(ThreadGroup group, Runnable target)

Выделяет новый объект Thread.

Thread(ThreadGroup group, Runnable target, String name)

Выделяет новый объект Thread, у которого target является его объектом выполнения, у которого указанное name является его именем, и который принадлежит группе потоков, на которую указывает group.

Thread(ThreadGroup group, Runnable target, String name, long stackSize)

Выделяет новый объект Thread, у которого target является его объектом выполнения, у которого указанное name является его именем, и который принадлежит группе потоков, на которую указывает group, и у которого указанный размер стека.

Thread(ThreadGroup group, String name)

Выделяет новый объект Thread.

Методы

Модификатор и тип Метод и описание
static int activeCount()

Возвращает оценку количества активных потоков в группе потоков текущего потока и его подгруппах.

void checkAccess()

Определяет, имеет ли текущий запущенный поток разрешение на изменение этого потока.

protected Object clone()

Бросает CloneNotSupportedException, так как поток не может быть осмысленно клонирован.

int countStackFrames()

Устарело.

Определение этого вызова зависит от suspend(), который устарел. Кроме того, результаты этого вызова никогда не были хорошо определены.

static Thread currentThread()

Возвращает ссылку на объект текущего выполняющегося потока.

void destroy()

Устарело.

Этот метод изначально был разработан для уничтожения этого потока без какой-либо очистки. Любые мониторы, которые он удерживал, оставались бы заблокированными. Однако метод никогда не был реализован. Если бы он был реализован, он был бы подвержен тупику в той же мере, что и suspend(). Если целевой поток удерживал блокировку, защищающую критический системный ресурс, при его уничтожении, ни один поток никогда не смог бы получить доступ к этому ресурсу. Если другой поток когда-либо попытался заблокировать этот ресурс, произошёл бы тупик. Такие тупики обычно проявляются как «замороженные» процессы. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.

static void dumpStack()

Выводит трассировку стека текущего потока в стандартный поток ошибок.

static int enumerate(Thread[] tarray)

Копирует в указанный массив каждый активный поток в группе потоков текущего потока и его подгруппах.

static Map<Thread,StackTraceElement[]> getAllStackTraces()

Возвращает карту трассировок стека для всех активных потоков.

ClassLoader getContextClassLoader()

Возвращает контекстный ClassLoader для этого потока.

static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()

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

long getId()

Возвращает идентификатор этого потока.

String getName()

Возвращает имя этого потока.

int getPriority()

Возвращает приоритет этого потока.

StackTraceElement[] getStackTrace()

Возвращает массив элементов трассировки стека, представляющих дамп стека этого потока.

Thread.State getState()

Возвращает состояние этого потока.

ThreadGroup getThreadGroup()

Возвращает группу потоков, к которой принадлежит этот поток.

Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()

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

static boolean holdsLock(Object obj)

Возвращает true, если и только если текущий поток удерживает блокировку монитора на указанном объекте.

void interrupt()

Прерывает этот поток.

static boolean interrupted()

Проверяет, был ли прерван текущий поток.

boolean isAlive()

Проверяет, жив ли этот поток.

boolean isDaemon()

Проверяет, является ли этот поток демоном.

boolean isInterrupted()

Проверяет, был ли прерван этот поток.

void join()

Ждёт завершения этого потока.

void join(long millis)

Ждёт не более millis миллисекунд, пока этот поток завершится.

void join(long millis, int nanos)

Ждёт не более millis миллисекунд плюс nanos наносекунд, пока этот поток завершится.

void resume()

Устарело.

Этот метод существует только для использования с suspend(), который устарел, так как он подвержен тупиковым ситуациям. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.

void run()

Если этот поток был создан с использованием отдельного Runnable объекта run, то метод Runnable этого run объекта вызывается; в противном случае этот метод ничего не делает и возвращается.

void setContextClassLoader(ClassLoader cl)

Устанавливает контекстный ClassLoader для этого потока.

void setDaemon(boolean on)

Помечает этот поток как демонический поток или пользовательский поток.

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

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

void setName(String name)

Изменяет имя этого потока на значение аргумента name.

void setPriority(int newPriority)

Изменяет приоритет этого потока.

void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

Устанавливает обработчик, вызываемый, когда этот поток внезапно завершается из-за необработанного исключения.

static void sleep(long millis)

Заставляет текущий выполняющийся поток спать (временно приостановить выполнение) на заданное количество миллисекунд, с учётом точности и надёжности системных таймеров и планировщиков.

static void sleep(long millis, int nanos)

Заставляет текущий выполняющийся поток спать (временно приостановить выполнение) на заданное количество миллисекунд плюс заданное количество наносекунд, с учётом точности и надёжности системных таймеров и планировщиков.

void start()

Запускает выполнение этого потока; виртуальная машина Java вызывает метод run этого потока.

void stop()

Устарело.

Этот метод по своей сути небезопасен. Остановка потока с помощью Thread.stop приводит к разблокировке всех мониторов, которые он заблокировал (как естественное следствие распространения необработанного исключения ThreadDeath по стеку). Если какой-либо из объектов, ранее защищаемых этими мониторами, был в несогласованном состоянии, повреждённые объекты становятся видимыми для других потоков, что может привести к произвольному поведению. Многие случаи использования stop следует заменить кодом, который просто изменяет некоторую переменную, чтобы указать целевому потоку остановиться. Целевой поток должен регулярно проверять эту переменную и возвращаться из своего метода run упорядоченным образом, если переменная указывает на остановку. Если целевой поток ждёт в течение длительного времени (например, на переменной условия), метод interrupt должен использоваться для прерывания ожидания. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.

void stop(Throwable obj)

Устарело.

Этот метод изначально был разработан для принудительной остановки потока и выброса заданного Throwable в качестве исключения. Он по своей сути небезопасен (см. stop() для получения подробной информации) и, кроме того, мог быть использован для создания исключений, которые целевой поток не был готов обрабатывать. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.

void suspend()

Устарело.

Этот метод устарел, так как он по своей сути подвержен тупиковым ситуациям. Если целевой поток удерживает блокировку монитора, защищающую критический системный ресурс, когда он приостановлен, ни один поток не может получить доступ к этому ресурсу до тех пор, пока целевой поток не будет возобновлён. Если поток, который должен возобновить целевой поток, попытается заблокировать этот монитор до вызова resume, возникает тупиковая ситуация. Такие тупики обычно проявляются как «замороженные» процессы. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.

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

public Thread(Runnable target)

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

Параметры:
target - объект, метод run которого вызывается, когда этот поток запущен. Если null, метод run этого класса ничего не делает.

Thread

public Thread(ThreadGroup group,
              Runnable target)

Выделяет новый объект Thread. Этот конструктор имеет тот же эффект, что и Thread (group, target, gname) , где gname — это недавно сгенерированное имя. Автоматически сгенерированные имена имеют вид "Thread-"+n, где n — целое число.

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

Thread

public Thread(String name)

Выделяет новый объект Thread. Этот конструктор имеет тот же эффект, что и Thread (null, null, name).

Параметры:
name - имя нового потока

Thread

public Thread(ThreadGroup group,
              String name)

Выделяет новый объект Thread. Этот конструктор имеет тот же эффект, что и Thread (group, null, name).

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

Thread

public Thread(Runnable target,
              String name)

Выделяет новый объект Thread. Этот конструктор имеет тот же эффект, что и Thread (null, target, name).

Параметры:
target - объект, метод run которого вызывается, когда этот поток запущен. Если null, вызывается метод run этого потока.
name - имя нового потока

Thread

public Thread(ThreadGroup group,
              Runnable target,
              String name)

Выделяет новый объект Thread, у которого target в качестве объекта run, указанное name в качестве имени и принадлежит к группе потоков, указанной в group.

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

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

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

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

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

Thread

public Thread(ThreadGroup group,
              Runnable target,
              String name,
              long stackSize)

Выделяет новый объект Thread, у которого target в качестве объекта run, указанное name в качестве имени и принадлежит к группе потоков, указанной в group, и имеет указанный размер стека.

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

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

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

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

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

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

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

Методы

currentThread

public static Thread currentThread()

Возвращает ссылку на объект текущего выполняемого потока.

Возвращает:
выполняемый в данный момент поток.

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 - дополнительные наносекунды ожидания
Исключения:
IllegalArgumentException - если значение millis отрицательно или значение nanos не находится в диапазоне 0-999999
InterruptedException - если какой-либо поток прервал текущий поток. Статус прерывания текущего потока сбрасывается при возникновении этого исключения.

clone

protected Object clone()
                throws CloneNotSupportedException

Выбрасывает CloneNotSupportedException, так как поток не может быть клонирован осмысленно. Создайте новый поток вместо этого.

Переопределяет:
clone в классе Object
Возвращает:
клонированную копию этого экземпляра.
Исключения:
CloneNotSupportedException - всегда
См. также:
Cloneable

start

public void start()

Запускает выполнение этого потока; виртуальная машина Java вызывает метод run этого потока.

В результате выполняются два потока одновременно: текущий поток (который возвращается из вызова метода start) и другой поток (который выполняет свой метод run).

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

Исключения:
IllegalThreadStateException - если поток уже был запущен.
См. также:
run(), stop()

run

public void run()

Если этот поток был создан с помощью отдельного объекта Runnable run, то метод Runnable этого объекта run вызывается; в противном случае этот метод ничего не делает и возвращается.

Подклассы Thread должны переопределять этот метод.

Указано в:
run в интерфейсе Runnable
См. также:
start(), stop(), Thread(ThreadGroup, Runnable, String)

stop

@Deprecated
public final void stop()

Устаревший. Этот метод по своей природе небезопасен. Остановка потока с помощью Thread.stop приводит к разблокировке всех мониторов, которые он заблокировал (как естественное следствие распространения исключения ThreadDeath вверх по стеку). Если какие-либо объекты, ранее защищённые этими мониторами, находились в несогласованном состоянии, повреждённые объекты станут видимыми для других потоков, что может привести к произвольному поведению. Многие случаи использования stop следует заменить кодом, который просто изменяет некоторую переменную, чтобы указать целевому потоку, что он должен остановиться. Целевой поток должен регулярно проверять эту переменную и возвращаться из своего метода run упорядоченно, если переменная указывает на то, что он должен остановиться. Если целевой поток ожидает в течение длительного времени (например, на переменной состояния), следует использовать метод interrupt для прерывания ожидания. Более подробную информацию см. на Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.

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

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

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

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

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

Приложение обычно не должно пытаться перехватить ThreadDeath , если только оно не должно выполнить какие-то чрезвычайные операции по очистке (обратите внимание, что выброс ThreadDeath вызывает выполнение finally блоков try операторов перед официальной смертью потока). Если блок catch перехватывает объект ThreadDeath, важно повторно выбросить объект, чтобы поток действительно умер.

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

Исключения:
SecurityException - если текущий поток не может изменить этот поток.
См. также:
interrupt(), checkAccess(), run(), start(), ThreadDeath, ThreadGroup.uncaughtException(Thread,Throwable), SecurityManager.checkAccess(Thread), SecurityManager.checkPermission(java.security.Permission)

stop

@Deprecated
public final void stop(Throwable obj)

Устаревший. Этот метод изначально был разработан для принудительной остановки потока и выброса заданного исключения Throwable. Он был по своей природе небезопасен (см. stop() для подробностей), а кроме того, мог использоваться для генерации исключений, с которыми целевой поток не был готов работать. Более подробную информацию см. на Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?.

Выбрасывает UnsupportedOperationException.

Параметры:
obj - игнорируется

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 селектора.

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

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

Исключения:
SecurityException - если текущий поток не может изменить этот поток

interrupted

public static boolean interrupted()

Проверяет, был ли текущий поток прерван. Статус прерывания потока сбрасывается этим методом. Другими словами, если этот метод был бы вызван дважды подряд, второй вызов вернул бы false (если бы текущий поток не был прерван снова после того, как первый вызов сбросил его статус прерывания и до того, как второй вызов его проверил).

Прерывание потока, проигнорированное из-за того, что поток не был жив во время прерывания, отразится на возврате этого метода false.

Возвращает:
true если текущий поток был прерван; false в противном случае.
См. также:
isInterrupted()

isInterrupted

public boolean isInterrupted()

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

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

Возвращает:
true если эта нить была прервана; false в противном случае.
См. также:
interrupted()

destroy

@Deprecated
public void destroy()

Устаревший. Этот метод изначально был разработан для уничтожения этой нити без каких-либо действий по очистке. Любые мониторы, которые она удерживала, оставались бы заблокированными. Однако метод никогда не был реализован. Если бы он был реализован, он бы подвергался тупику, аналогично suspend(). Если целевая нить удерживала блокировку, защищающую критический системный ресурс, при ее уничтожении, ни одна нить больше не могла получить доступ к этому ресурсу. Если другая нить попыталась бы заблокировать этот ресурс, возник бы тупик. Такие тупики обычно проявляются как «замороженные» процессы. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.

Бросает NoSuchMethodError.

Бросает:
NoSuchMethodError — всегда

isAlive

public final boolean isAlive()

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

Возвращает:
true если эта нить активна; false в противном случае.

suspend

@Deprecated
public final void suspend()

Устаревший. Этот метод устарел, поскольку он сам по себе подвержен тупиковой ситуации. Если целевая нить удерживает блокировку монитора, защищающего критический системный ресурс, когда она приостановлена, ни одна нить не может получить доступ к ресурсу до тех пор, пока целевая нить не будет возобновлена. Если нить, которая должна возобновить целевую нить, попытается заблокировать этот монитор до вызова resume, возникает тупиковая ситуация. Такие тупики обычно проявляются как «замороженные» процессы. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.

Приостанавливает эту нить.

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

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

Бросает:
SecurityException — если текущая нить не может изменить эту нить.
См. также:
checkAccess()

resume

@Deprecated
public final void resume()

Устаревший. Этот метод существует только для использования с suspend(), который устарел, поскольку подвержен тупиковой ситуации. Для получения дополнительной информации см. Почему Thread.stop, Thread.suspend и Thread.resume устарели?.

Возобновляет приостановленную нить.

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

Если нить активна, но приостановлена, она возобновляется и ей разрешается выполнять действия.

Бросает:
SecurityException — если текущая нить не может изменить эту нить.
См. также:
checkAccess(), suspend()

setPriority

public final void setPriority(int newPriority)

Изменяет приоритет этой нити.

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

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

Параметры:
newPriority - приоритет, который нужно установить для этой нити
Бросает:
IllegalArgumentException - если приоритет не находится в диапазоне MIN_PRIORITY до MAX_PRIORITY.
SecurityException - если текущая нить не может изменить эту нить.
См. также:
getPriority(), checkAccess(), getThreadGroup(), MAX_PRIORITY, MIN_PRIORITY, ThreadGroup.getMaxPriority()

getPriority

public final int getPriority()

Возвращает приоритет этой нити.

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

setName

public final void setName(String name)

Изменяет имя этой нити на значение аргумента name.

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

Параметры:
name - новое имя этой нити.
Бросает:
SecurityException - если текущая нить не может изменить эту нить.
См. также:
getName(), checkAccess()

getName

public final String getName()

Возвращает имя этой нити.

Возвращает:
имя этой нити.
См. также:
setName(String)

getThreadGroup

public final ThreadGroup getThreadGroup()

Возвращает группу нитей, к которой принадлежит эта нить. Этот метод возвращает 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
public int countStackFrames()

Устаревший. Определение этого вызова зависит от suspend(), который устарел. Кроме того, результаты этого вызова никогда не были четко определены.

Подсчитывает количество кадров стека в этой нити. Нит должна быть приостановлена.

Возвращает:
количество кадров стека в этой нити.
Бросает:
IllegalThreadStateException - если эта нить не приостановлена.

join

public final void join(long millis)
                throws InterruptedException

Ожидает не более millis миллисекунд, пока эта нить не завершит свою работу. Значение таймаута 0 означает ожидание бесконечно.

Эта реализация использует цикл вызовов 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 наносекунд, пока эта нить не завершит свою работу.

Эта реализация использует цикл вызовов 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 - если какой-либо поток прервал текущий поток. Состояние прерывания текущего потока очищается при возникновении этого исключения.

dumpStack

public static void dumpStack()

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

См. также:
Throwable.printStackTrace()

setDaemon

public final void setDaemon(boolean on)

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

Этот метод должен быть вызван до запуска потока.

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

isDaemon

public final boolean isDaemon()

Проверяет, является ли этот поток демон-потоком.

Возвращает:
true если этот поток является демон-потоком; false в противном случае.
См. также:
setDaemon(boolean)

checkAccess

public final void checkAccess()

Определяет, имеет ли текущий поток разрешение на изменение этого потока.

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

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

toString

public String toString()

Возвращает строковое представление этого потока, включая имя потока, приоритет и группу потоков.

Переопределяет:
toString в классе Object
Возвращает:
строковое представление этого потока.

getContextClassLoader

public ClassLoader getContextClassLoader()

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

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

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

setContextClassLoader

public void setContextClassLoader(ClassLoader cl)

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

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

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

holdsLock

public static boolean holdsLock(Object obj)

Возвращает true тогда и только тогда, когда текущий поток владеет мониторным замком на указанном объекте.

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

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

getStackTrace

public StackTraceElement[] getStackTrace()

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

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

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

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

getAllStackTraces

public static Map<Thread,StackTraceElement[]> getAllStackTraces()

Возвращает карту трассировок стека для всех активных потоков. Ключами карты являются потоки, а каждое значение карты — массив StackTraceElement , представляющий дамп стека соответствующего Thread. Возвращаемые трассировки стека имеют формат, указанный для метода getStackTrace.

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

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

Возвращает:
мапу от Map до массива StackTraceElement , представляющего трассировку стека соответствующего потока.
Исключения:
SecurityException - если существует менеджер безопасности и его метод checkPermission не позволяет получить трассировку стека потока.
С:
1.5
См. также:
getStackTrace(), SecurityManager.checkPermission(java.security.Permission), RuntimePermission, Throwable.getStackTrace()

getId

public long getId()

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

Возвращает:
идентификатор этого потока.
С:
1.5

getState

public Thread.State getState()

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

Возвращает:
состояние этого потока.
С:
1.5

setDefaultUncaughtExceptionHandler

public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

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

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

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

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

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

getDefaultUncaughtExceptionHandler

public static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()

Возвращает обработчик по умолчанию, вызываемый при внезапном завершении потока из-за необработанного исключения. Если возвращаемое значение равно null, обработчика по умолчанию нет.

Возвращает:
обработчик необработанных исключений по умолчанию для всех потоков
С момента:
1.5
См. также:
setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)

getUncaughtExceptionHandler

public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()

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

Возвращает:
обработчик необработанных исключений для этого потока
С момента:
1.5

setUncaughtExceptionHandler

public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

Устанавливает обработчик, вызываемый при внезапном завершении этого потока из-за необработанного исключения.

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

Параметры:
eh — объект, используемый в качестве обработчика необработанных исключений этого потока. Если null, то у этого потока нет явного обработчика.
Исключения:
SecurityException — если текущий поток не имеет права изменять этот поток.
С момента:
1.5
См. также:
setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler), ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)

© 1993, 2020, 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.

Spec-Zone.ru

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