Spec-Zone .ru
спецификации, руководства, описания, API
|
public class Thread extends Object implements Runnable
У каждого потока есть приоритет. Потоки с более высоким приоритетом выполняются в предпочтении к потокам с более низким приоритетом. Каждый поток может или не может также быть отмечен как демон. Когда код, работающий в некотором потоке, создает новое Thread
объект, новый поток имеет свой приоритет первоначально набор, равный приоритету потока создания, и является потоком демона, если и только если поток создания является демоном.
Когда виртуальная машина Java запускает, обычно есть единственный поток недемона (который обычно вызывает названный метод main
из некоторого определяемого класса). Виртуальная машина Java продолжает выполнять потоки, пока любое из следующего не происходит:
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();
У каждого потока есть имя в целях идентификации. Больше чем у одного потока может быть то же самое имя. Если имя не определяется, когда поток создается, новое имя сгенерировано для этого.
Если не указано иное, передача a null
параметр конструктору или методу в этом классе вызовет a NullPointerException
быть брошенным.
Runnable
, Runtime.exit(int)
, run()
, stop()
Модификатор и Тип | Класс и Описание |
---|---|
static class |
Поток. Государство
Состояние потока.
|
static interface |
Поток. 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()
Возвращает карту трассировок стека для всех живых потоков.
|
ClassLoder |
getContextClassLoader()
Возвращает ClassLoder контекста для этого Потока.
|
static Thread.UncaughtExceptionHandler |
getDefaultUncaughtExceptionHandler()
Возвращает обработчик по умолчанию, вызванный, когда поток резко завершается из-за непойманного исключения.
|
long |
getId()
Возвращает идентификатор этого Потока.
|
Строка |
getName()
Возвраты имя этого потока.
|
int |
getPriority()
Возвраты приоритет этого потока.
|
StackTraceElement[] |
getStackTrace()
Возвращает массив микроэлементов стека, представляющих дамп стека этого потока.
|
Поток. Государство |
getState()
Возвращает состояние этого потока.
|
ThreadGroup |
getThreadGroup()
Возвращает группу потока, которой принадлежит этот поток.
|
Поток. 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 выполненный объект, тогда это Runnable объект run метод вызывают; иначе, этот метод не делает ничего и возвратов. |
void |
setContextClassLoader(ClassLoader cl)
Устанавливает ClassLoder контекста для этого Потока.
|
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 должен быть заменен кодом, который просто изменяет некоторую переменную, чтобы указать, что целевой поток должен прекратить работать. Целевой поток должен регулярно проверять эту переменную, и возврат из его метода выполнения аккуратным способом, если переменная указывает, что это должно прекратить работать. Если целевой поток ожидает в течение многих длительных периодов (на условной переменной, например), interrupt метод должен использоваться, чтобы прервать ожидание. Для получения дополнительной информации см., Почему Thread.stop, Thread.suspend и Осуждаемый Thread.resume?. |
void |
stop(Throwable obj)
Осуждаемый.
Этот метод по сути опасен. См.
stop() для деталей. Дополнительная опасность этого метода состоит в том, что он может использоваться, чтобы генерировать исключения, которые целевой поток неподготовлен, чтобы обработать (включая проверенные исключения, которые не мог возможно выдать поток, было это не для этого метода). Для получения дополнительной информации см., Почему Thread.stop, Thread.suspend и Осуждаемый Thread.resume?. |
void |
suspend()
Осуждаемый.
Этот метод был осужден, поскольку это является по сути склонным к мертвой блокировке. Если целевой поток содержит блокировку на мониторе, защищающем критический системный ресурс, когда это приостанавливается, никакой поток не может получить доступ к этому ресурсу, пока целевой поток не возобновляется. Если поток, который возобновил бы целевой поток, пытается заблокировать этот монитор до вызова
resume , результаты мертвой блокировки. Такие мертвые блокировки обычно проявляются как "замороженные" процессы. Для получения дополнительной информации см., Почему Thread.stop, Thread.suspend и Осуждаемый Thread.resume?. |
Строка |
toString()
Возвращает строковое представление этого потока, включая имя потока, приоритет, и группу потока.
|
static void |
yield()
Подсказка к планировщику, что текущий поток готов привести к своему текущему использованию процессора.
|
public static final int MIN_PRIORITY
public static final int NORM_PRIORITY
public static final int MAX_PRIORITY
public Thread()
Thread
объект. Этот конструктор имеет тот же самый эффект как Поток
(null, null, gname)
, где gname
недавно сгенерированное имя. Автоматически сгенерированные имена имеют форму "Thread-"+
n, где n является целым числом.public Thread(Runnable target)
Thread
объект. Этот конструктор имеет тот же самый эффект как Поток
(null, target, gname)
, где gname
недавно сгенерированное имя. Автоматически сгенерированные имена имеют форму "Thread-"+
n, где n является целым числом.target
- объект, чей run
метод вызывается, когда этот поток запускается. Если null
, это классы run
метод ничего не делает.public Thread(ThreadGroup group, Runnable target)
Thread
объект. Этот конструктор имеет тот же самый эффект как Поток
(group, target, gname)
, где gname
недавно сгенерированное имя. Автоматически сгенерированные имена имеют форму "Thread-"+
n, где n является целым числом.group
- группа потока. Если null
и есть менеджер безопасности, группа определяется SecurityManager.getThreadGroup (). Если нет менеджера безопасности или SecurityManager.getThreadGroup()
возвраты null
, группа устанавливается в группу потока текущего потока.target
- объект, чей run
метод вызывается, когда этот поток запускается. Если null
, метод выполнения этого потока вызывается.SecurityException
- если текущий поток не может создать поток в указанной группе потокаpublic Thread(String name)
Thread
объект. Этот конструктор имеет тот же самый эффект как Поток
(null, null, name)
.name
- имя нового потокаpublic Thread(ThreadGroup group, String name)
Thread
объект. Этот конструктор имеет тот же самый эффект как Поток
(group, null, name)
.group
- группа потока. Если null
и есть менеджер безопасности, группа определяется SecurityManager.getThreadGroup (). Если нет менеджера безопасности или SecurityManager.getThreadGroup()
возвраты null
, группа устанавливается в группу потока текущего потока.name
- имя нового потокаSecurityException
- если текущий поток не может создать поток в указанной группе потокаpublic Thread(Runnable target, String name)
Thread
объект. Этот конструктор имеет тот же самый эффект как Поток
(null, target, name)
.target
- объект, чей run
метод вызывается, когда этот поток запускается. Если null
, метод выполнения этого потока вызывается.name
- имя нового потокаpublic Thread(ThreadGroup group, Runnable target, String name)
Thread
возразите так, чтобы это имело target
как его объект выполнения, имеет указанное name
как его имя, и принадлежит группе потока, упомянутой group
. Если есть менеджер безопасности, checkAccess
метод вызывается с ThreadGroup как его параметр.
Кроме того, checkPermission
метод вызывается с RuntimePermission("enableContextClassLoaderOverride")
разрешение когда вызвано прямо или косвенно конструктором подкласса, который переопределяет getContextClassLoader
или setContextClassLoader
методы.
Приоритет недавно создаваемого потока устанавливается равный приоритету потока, создающего это, то есть, в настоящий момент рабочего потока. Метод setPriority может использоваться, чтобы изменить приоритет на новое значение.
Недавно создаваемый поток первоначально отмечается как являющийся потоком демона, если и только если поток, создающий его, в настоящий момент отмечается как поток демона. Метод setDaemon может использоваться, чтобы измениться, является ли поток демоном.
group
- группа потока. Если null
и есть менеджер безопасности, группа определяется SecurityManager.getThreadGroup (). Если нет менеджера безопасности или SecurityManager.getThreadGroup()
возвраты null
, группа устанавливается в группу потока текущего потока.target
- объект, чей run
метод вызывается, когда этот поток запускается. Если null
, метод выполнения этого потока вызывается.name
- имя нового потокаSecurityException
- если текущий поток не может создать поток в указанной группе потока или не может переопределить методы загрузчика класса контекста.public Thread(ThreadGroup group, Runnable target, String name, long stackSize)
Thread
возразите так, чтобы это имело target
как его объект выполнения, имеет указанное name
как его имя, и принадлежит группе потока, упомянутой group
, и имеет указанный размер стека. Этот конструктор идентичен Thread(ThreadGroup,Runnable,String)
за исключением факта, что это позволяет размеру стека потока быть определенным. Размер стека является приблизительным количеством байтов адресного пространства, которое виртуальная машина должна выделить для стека этого потока. Эффект stackSize
параметр, если таковые вообще имеются, является чрезвычайно зависимой платформой.
На некоторых платформах, определяя более высокое значение для stackSize
параметр может позволить потоку достигать большей глубины рекурсии прежде, чем бросить a StackOverflowError
. Точно так же определение нижнего значения может позволить большему числу потоков существовать одновременно, не бросая OutOfMemoryError
(или другая внутренняя ошибка). Детали отношения между значением параметра stackSize и максимальным уровнем глубины и параллелизма рекурсии зависимы от платформы. На некоторых платформах, значении stackSize
параметр не может иметь никакого эффекта вообще.
Виртуальная машина свободна обработать stackSize
параметр как предложение. Если указанное значение необоснованно низко для платформы, виртуальная машина может вместо этого использовать некоторое специфичное для платформы минимальное значение; если указанное значение необоснованно высоко, виртуальная машина может вместо этого использовать некоторый специфичный для платформы максимум. Аналогично, виртуальная машина свободна округлить в большую сторону указанное значение или вниз поскольку это считает целесообразным (или проигнорировать это полностью).
Определение значения нуля для stackSize
параметр заставит этого конструктора вести себя точно как Thread(ThreadGroup, Runnable, String)
конструктор.
Из-за зависимой от платформы природы поведения этого конструктора, экстремальная забота должна быть осуществлена в ее использовании. Размер стека потока, необходимый, чтобы выполнить данное вычисление, вероятно, изменится от одной реализации JRE до другого. В свете этого изменения может требоваться осторожная настройка параметра размера стека, и настройка, возможно, должна быть повторена для каждой реализации JRE, на которой должно работать приложение.
Примечание реализации: разработчики платформы Java поощряются задокументировать поведение своей реализации относительно stackSize
параметр.
group
- группа потока. Если null
и есть менеджер безопасности, группа определяется SecurityManager.getThreadGroup (). Если нет менеджера безопасности или SecurityManager.getThreadGroup()
возвраты null
, группа устанавливается в группу потока текущего потока.target
- объект, чей run
метод вызывается, когда этот поток запускается. Если null
, метод выполнения этого потока вызывается.name
- имя нового потокаstackSize
- требуемый размер стека для нового потока, или нуль, чтобы указать, что этот параметр должен быть проигнорирован.SecurityException
- если текущий поток не может создать поток в указанной группе потокаpublic static Thread currentThread()
public static void yield()
Урожай является эвристической попыткой улучшить относительную прогрессию между потоками, которые иначе сверхиспользовали бы ЦП. Его использование должно быть объединено с подробным профилированием и сравнительным тестированием, чтобы гарантировать, что это фактически имеет требуемый эффект.
Редко уместно использовать этот метод. Для отладки или тестирования целей, может быть полезно, где это может помочь воспроизвести ошибки, должные мчаться условия. Это может также быть полезно, разрабатывая конструкции управления совместным выполнением, такие как те в java.util.concurrent.locks
пакет.
public static void sleep(long millis) throws InterruptedException
millis
- отрезок времени, чтобы спать в миллисекундахIllegalArgumentException
- если значение millis
отрицательноInterruptedException
- если какой-либо поток прервал текущий поток. Прерванное состояние текущего потока очищается, когда это исключение выдается.public static void sleep(long millis, int nanos) throws InterruptedException
millis
- отрезок времени, чтобы спать в миллисекундахnanos
- 0-999999
дополнительные наносекунды, чтобы спатьIllegalArgumentException
- если значение millis
отрицательно, или значение nanos
не находится в диапазоне 0-999999
InterruptedException
- если какой-либо поток прервал текущий поток. Прерванное состояние текущего потока очищается, когда это исключение выдается.protected Object clone() throws CloneNotSupportedException
clone
в классе Object
CloneNotSupportedException
- всегдаCloneable
public void start()
run
метод этого потока. Результат состоит в том, что два потока работают одновременно: текущий поток (который возвращается из звонка start
метод) и другой поток (который выполняет run
метод).
Никогда не законно запустить поток не раз. В частности поток не может быть перезапущен, как только он завершил выполнение.
IllegalThreadStateException
- если поток был уже запущен.run()
, stop()
public void run()
Runnable
выполненный объект, тогда это Runnable
объект run
метод вызывают; иначе, этот метод не делает ничего и возвратов. Подклассы Thread
должен переопределить этот метод.
run
в интерфейсе Runnable
start()
, stop()
, Thread(ThreadGroup, Runnable, String)
@Deprecated public final void stop()
ThreadDeath
исключение, распространяющее стек). Если какой-либо из объектов, ранее защищенных этими мониторами, был в непоследовательном состоянии, поврежденные объекты становятся видимыми к другим потокам, потенциально приводящим к произвольному поведению. Много использования stop
должен быть заменен кодом, который просто изменяет некоторую переменную, чтобы указать, что целевой поток должен прекратить работать. Целевой поток должен регулярно проверять эту переменную, и возврат из его метода выполнения аккуратным способом, если переменная указывает, что это должно прекратить работать. Если целевой поток ожидает в течение многих длительных периодов (на условной переменной, например), interrupt
метод должен использоваться, чтобы прервать ожидание. Для получения дополнительной информации см., Почему Thread.stop, Thread.suspend и Осуждаемый Thread.resume?. Если есть установленный менеджер безопасности, checkAccess
с методом вызывают this
как его параметр. Это может привести к a SecurityException
будучи повышенным (в текущем потоке).
Если этот поток отличается от текущего потока (то есть, текущий поток пытается остановить поток кроме себя), менеджер безопасности checkPermission
метод (с a RuntimePermission("stopThread")
параметр), вызывается, кроме того. Снова, это может привести к броску a SecurityException
(в текущем потоке).
Поток, представленный этим потоком, вынуждается остановиться независимо от того, что это делает неправильно и бросить недавно создаваемый ThreadDeath
возразите как исключение.
Разрешается остановить поток, который еще не был запущен. Если поток в конечном счете запускается, он сразу завершается.
Приложение не должно обычно пытаться поймать ThreadDeath
если это не должно сделать некоторую экстраординарную работу уборки (отметьте что бросок ThreadDeath
причины finally
пункты try
операторы, которые будут выполнены перед потоком официально, умирают). Если a catch
пункт ловит a ThreadDeath
объект, важно повторно бросить объект так, чтобы поток фактически умер.
Высокоуровневый обработчик ошибок, который реагирует на иначе непойманные исключения, не распечатывает сообщение или иначе уведомляет приложение, если непойманное исключение является экземпляром ThreadDeath
.
SecurityException
- если текущий поток не может изменить этот поток.interrupt()
, checkAccess()
, run()
, start()
, ThreadDeath
, ThreadGroup.uncaughtException(Thread,Throwable)
, SecurityManager.checkAccess(Thread)
, SecurityManager.checkPermission(java.security.Permission)
@Deprecated public final void stop(Throwable obj)
stop()
для деталей. Дополнительная опасность этого метода состоит в том, что он может использоваться, чтобы генерировать исключения, которые целевой поток неподготовлен, чтобы обработать (включая проверенные исключения, которые не мог возможно выдать поток, было это не для этого метода). Для получения дополнительной информации см., Почему Thread.stop, Thread.suspend и Осуждаемый Thread.resume?. Если есть установленный менеджер безопасности, checkAccess
метод этого потока вызывают, который может привести к a SecurityException
будучи повышенным (в текущем потоке).
Если этот поток отличается от текущего потока (то есть, текущий поток пытается остановить поток кроме себя), или obj
не экземпляр ThreadDeath
, менеджер безопасности checkPermission
метод (с RuntimePermission("stopThread")
параметр), вызывается, кроме того. Снова, это может привести к броску a SecurityException
(в текущем потоке).
Если параметр obj
нуль, a NullPointerException
бросается (в текущем потоке).
Поток, представленный этим потоком, вынуждается остановиться независимо от того, что это делает неправильно и бросить Throwable
объект obj
как исключение. Это - необычное действие, чтобы взять; обычно, stop
метод, который не берет параметров, должен использоваться.
Разрешается остановить поток, который еще не был запущен. Если поток в конечном счете запускается, он сразу завершается.
obj
- Throwable возражают, чтобы быть брошенными.SecurityException
- если текущий поток не может изменить этот поток.NullPointerException
- если obj является null.interrupt()
, checkAccess()
, run()
, start()
, stop()
, SecurityManager.checkAccess(Thread)
, SecurityManager.checkPermission(java.security.Permission)
public void interrupt()
Если текущий поток не прерывает себя, который всегда разрешается, checkAccess
метод этого потока вызывается, который может вызвать a SecurityException
быть брошенным.
Если этот поток блокируется в вызове wait()
, wait(long)
, или wait(long, int)
методы Object
класс, или join()
, join(long)
, join(long, int)
, sleep(long)
, или sleep(long, int)
, методы этого класса, тогда его состояние прерывания будет очищено, и он получит InterruptedException
.
Если этот поток блокируется в работе ввода-вывода на прерывистый канал
тогда канал будет закрыт, состояние прерывания потока будет установлено, и поток получит a
ClosedByInterruptException
.
Если этот поток блокируется в a Selector
тогда состояние прерывания потока будет установлено, и оно сразу возвратится из работы выбора, возможно с ненулевым значением, так же, как если бы селектор wakeup
метод был вызван.
Если ни одно из предыдущих условий не будет содержать тогда состояние прерывания этого потока, то будет установлен.
Прерывание потока, который не жив, не должно иметь никакого эффекта.
SecurityException
- если текущий поток не может изменить этот потокpublic static boolean interrupted()
Прерывание потока, проигнорированное, потому что поток не был жив во время прерывания, будет отражено этим false возвращающего метода.
true
если текущий поток был прерван; false
иначе.isInterrupted()
public boolean isInterrupted()
Прерывание потока, проигнорированное, потому что поток не был жив во время прерывания, будет отражено этим false возвращающего метода.
true
если этот поток был прерван; false
иначе.interrupted()
@Deprecated public void destroy()
suspend()
. Если целевой поток, сохраненный блокировкой, защищающей критический системный ресурс, когда это было уничтожено, никакой поток, мог когда-либо получать доступ к этому ресурсу снова. Если бы другой поток, когда-либо предпринимаемый, чтобы заблокировать этот ресурс, мертвая блокировка закончилась бы. Такие мертвые блокировки обычно проявляются как "замороженные" процессы. Для получения дополнительной информации см., Почему Thread.stop, Thread.suspend и Осуждаемый Thread.resume?.NoSuchMethodError
.NoSuchMethodError
- всегдаpublic final boolean isAlive()
true
если этот поток жив; false
иначе.@Deprecated public final void suspend()
resume
, результаты мертвой блокировки. Такие мертвые блокировки обычно проявляются как "замороженные" процессы. Для получения дополнительной информации см., Почему Thread.stop, Thread.suspend и Осуждаемый Thread.resume?. Во-первых, checkAccess
метод этого потока вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Если поток жив, он приостанавливается и не делает дальнейших успехов, только после того как он возобновляется.
SecurityException
- если текущий поток не может изменить этот поток.checkAccess()
@Deprecated public final void resume()
suspend()
, который был осужден, потому что это склонное к мертвой блокировке. Для получения дополнительной информации см., Почему Thread.stop, Thread.suspend и Осуждаемый Thread.resume?. Во-первых, checkAccess
метод этого потока вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Если поток жив, но приостанавливается, он возобновляется и разрешается сделать успехи в его выполнении.
SecurityException
- если текущий поток не может изменить этот поток.checkAccess()
, suspend()
public final void setPriority(int newPriority)
Сначала checkAccess
метод этого потока вызывают без параметров. Это может привести к броску a SecurityException
.
Иначе, приоритет этого потока устанавливается в меньшие из указанных newPriority
и максимальный разрешенный приоритет группы потока потока.
newPriority
- приоритет установить этот поток вIllegalArgumentException
- Если приоритет не находится в диапазоне MIN_PRIORITY
к MAX_PRIORITY
.SecurityException
- если текущий поток не может изменить этот поток.getPriority()
, checkAccess()
, getThreadGroup()
, MAX_PRIORITY
, MIN_PRIORITY
, ThreadGroup.getMaxPriority()
public final int getPriority()
setPriority(int)
public final void setName(String name)
name
. Сначала checkAccess
метод этого потока вызывают без параметров. Это может привести к броску a SecurityException
.
name
- новое имя для этого потока.SecurityException
- если текущий поток не может изменить этот поток.getName()
, checkAccess()
public final String getName()
setName(String)
public final ThreadGroup getThreadGroup()
public static int activeCount()
Возвращенное значение является только оценкой, потому что число потоков может измениться динамически, в то время как этот метод пересекает внутренние структуры данных, и мог бы влияться присутствием определенных системных потоков. Этот метод предназначается прежде всего для отладки и контроля целей.
public static int enumerate(Thread[] tarray)
ThreadGroup.enumerate(Thread[])
метод группы потока текущего потока. Приложение могло бы использовать activeCount метод, чтобы получить оценку того, насколько большой массив должен быть, однако если массив слишком короток, чтобы содержать все потоки, дополнительные потоки тихо игнорируются. Если является критическим получить каждый активный поток в группе потока текущего потока и ее подгруппах, invoker должен проверить, что возвращенное международное значение является строго меньше чем длина tarray
.
Из-за свойственного условия гонки в этом методе, рекомендуется, чтобы метод только использовался для отладки и контроля целей.
tarray
- массив, в который можно поместить список потоковSecurityException
- если ThreadGroup.checkAccess()
решает, что текущий поток не может получить доступ к своей группе потока@Deprecated public int countStackFrames()
suspend()
, который осуждается. Далее, результаты этого вызова никогда не были четко определены.IllegalThreadStateException
- если этот поток не приостанавливается.public final void join(long millis) throws InterruptedException
millis
миллисекунды для этого потока, чтобы умереть. Тайм-аут 0
средства ожидать навсегда. Эта реализация использует цикл this.wait
вызовы, обусловленные на this.isAlive
. Поскольку поток завершается this.notifyAll
метод вызывается. Этому рекомендуют это, приложения не используют wait
, notify
, или notifyAll
на Thread
экземпляры.
millis
- время, чтобы ожидать в миллисекундахIllegalArgumentException
- если значение millis
отрицательноInterruptedException
- если какой-либо поток прервал текущий поток. Прерванное состояние текущего потока очищается, когда это исключение выдается.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
- если какой-либо поток прервал текущий поток. Прерванное состояние текущего потока очищается, когда это исключение выдается.public final void join() throws InterruptedException
Вызов этого метода ведет себя точно таким же образом как вызов
соединение(0)
InterruptedException
- если какой-либо поток прервал текущий поток. Прерванное состояние текущего потока очищается, когда это исключение выдается.public static void dumpStack()
Throwable.printStackTrace()
public final void setDaemon(boolean on)
Этот метод должен быть вызван прежде, чем поток запускается.
on
- если true
, метки этот поток как поток демонаIllegalThreadStateException
- если этот поток является живойSecurityException
- если checkAccess()
решает, что текущий поток не может изменить этот потокpublic final boolean isDaemon()
true
если этот поток является потоком демона; false
иначе.setDaemon(boolean)
public final void checkAccess()
Если есть менеджер безопасности, checkAccess
метод вызывают с этим потоком как его параметр. Это может привести к броску a SecurityException
.
SecurityException
- если текущему потоку не позволяют получить доступ к этому потоку.SecurityManager.checkAccess(Thread)
public String toString()
public ClassLoader getContextClassLoader()
Если менеджер безопасности присутствует, и загрузчик класса invoker не null
и не то же самое как или предок загрузчика класса контекста, тогда этот метод вызывает менеджера безопасности checkPermission
метод с a RuntimePermission
("getClassLoader")
разрешение, чтобы проверить, что извлечение загрузчика класса контекста разрешается.
null
указывая на системный загрузчик класса (или, приводя к сбою это, загрузчик класса начальной загрузки)SecurityException
- если текущий поток не может получить ClassLoder контекстаpublic void setContextClassLoader(ClassLoader cl)
getContextClassLoader
, кодировать выполнение в потоке, загружая классы и ресурсы. Если менеджер безопасности присутствует, checkPermission
метод вызывается с a RuntimePermission
("setContextClassLoader")
разрешение, чтобы видеть, устанавливая ClassLoder контекста разрешается.
cl
- ClassLoder контекста для этого Потока, или нуль, указывающий на системный загрузчик класса (или, приводя к сбою это, загрузчик класса начальной загрузки)SecurityException
- если текущий поток не может установить ClassLoder контекстаpublic static boolean holdsLock(Object obj)
Этот метод разрабатывается, чтобы позволить программе утверждать, что текущий поток уже содержит указанную блокировку:
assert Thread.holdsLock(obj);
obj
- объект, на котором можно протестировать владение блокировкиNullPointerException
- если obj является nullpublic StackTraceElement[] getStackTrace()
Если есть менеджер безопасности, и этот поток не является текущим потоком, то метод checkPermission менеджера безопасности вызывают с разрешением RuntimePermission("getStackTrace"), чтобы видеть, ли нормально получать трассировку стека.
Некоторые виртуальные машины, при некоторых обстоятельствах, могут опустить один или более стековых фреймов от трассировки стека. В крайнем случае виртуальной машине, у которой нет никакой трассировочной информации стека относительно этого потока, разрешают возвратить массив нулевой длиной из этого метода.
SecurityException
- если менеджер безопасности существует, и его метод checkPermission не позволяет получать трассировку стека потока.SecurityManager.checkPermission(java.security.Permission)
, RuntimePermission
, Throwable.getStackTrace()
public static Map<Thread,StackTraceElement[]> getAllStackTraces()
getStackTrace
метод. Потоки могут выполняться, в то время как этот метод вызывают. Трассировка стека каждого потока только представляет снимок, и каждая трассировка стека может быть получена в различное время. Массив нулевой длиной будет возвращен в значении карты, если у виртуальной машины не будет никакой трассировочной информации стека о потоке.
Если есть менеджер безопасности, то метод checkPermission менеджера безопасности вызывают с разрешением RuntimePermission("getStackTrace") так же как разрешением RuntimePermission("modifyThreadGroup"), чтобы видеть, ли нормально получать трассировку стека всех потоков.
SecurityException
- если менеджер безопасности существует, и его метод checkPermission не позволяет получать трассировку стека потока.getStackTrace()
, SecurityManager.checkPermission(java.security.Permission)
, RuntimePermission
, Throwable.getStackTrace()
public long getId()
public Thread.State getState()
public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
Непойманной обработкой исключений управляет сначала поток, затем потоком ThreadGroup
возразите и наконец непойманным обработчиком исключений по умолчанию. Если у потока не будет явного непойманного набора обработчика исключений, и группа потока потока (включая родительские группы потока) не специализирует свой метод uncaughtException, то метод uncaughtException обработчика по умолчанию будет вызван.
Устанавливая непойманный обработчик исключений по умолчанию, приложение может изменить путь, которым непойманные исключения обрабатываются (такие как журналирование к определенному устройству, или файл) для тех потоков, которые уже приняли бы любое поведение "по умолчанию" обеспеченная система.
Отметьте, что непойманный обработчик исключений по умолчанию не должен обычно подчиняться объекту ThreadGroup потока, поскольку это могло вызвать бесконечную рекурсию.
eh
- объект использовать в качестве непойманного обработчика исключений по умолчанию. Если null тогда нет никакого обработчика по умолчанию.SecurityException
- если менеджер безопасности присутствует, и он отрицает RuntimePermission
("setDefaultUncaughtExceptionHandler")setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
, getUncaughtExceptionHandler()
, ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)
public static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
Поток может взять полный контроль над тем, как это отвечает на непойманные исключения при наличии его непойманного обработчика исключений явно набор. Если никакой такой обработчик не устанавливается тогда действия объекта ThreadGroup потока как его обработчик.
eh
- объект использовать в качестве непойманного обработчика исключений этого потока. Если у null тогда этот поток нет никакого явного обработчика.SecurityException
- если текущему потоку не позволяют изменить этот поток.setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
, ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.