Spec-Zone .ru
спецификации, руководства, описания, API
|
java.lang.Thread
В описаниях метода, которые следуют, очень важно различить среди "текущего потока" (поток, выполняющий метод), "это Thread
"(объект, для которого был вызван метод), и "этот поток" (поток, который представляется Thread
объект, для которого метод был вызван).
public classКогда новоеThread
implements Runnable { public final static intMIN_PRIORITY
= 1; public final static intMAX_PRIORITY
= 10; public final static intNORM_PRIORITY
= 5; publicThread
(); publicThread
(String name); publicThread
(Runnable runObject); publicThread
(Runnable runObject, String name); publicThread
(ThreadGroup group, String name) throws SecurityException,IllegalThreadStateException
; publicThread
(ThreadGroup group, Runnable runObject) throws SecurityException,IllegalThreadStateException
; publicThread
(ThreadGroup group, Runnable runObject, String name) throws SecurityException,IllegalThreadStateException
; public StringtoString
(); public voidcheckAccess
() throws SecurityException; public voidrun
(); public voidstart
() throws IllegalThreadStateException; public final voidstop
() throws SecurityException; public final voidstop
(Throwable thr) throws SecurityException, NullPointerException; public final voidsuspend
() throws SecurityException; public final voidresume
() throws SecurityException; public final StringgetName
(); public final voidsetName
(String name) throws SecurityException; public final ThreadGroupgetThreadGroup
(); public final intgetPriority
(); public final voidsetPriority
(int newPriority) throws SecurityException, IllegalArgumentException; public final booleanisDaemon
(); public final voidsetDaemon
(boolean on) throws SecurityException, IllegalThreadStateException; public final booleanisAlive
(); public intcountStackFrames
(); public final voidjoin
() throws InterruptedException; public final voidjoin
(long millis) throws InterruptedException; public final voidjoin
(long millis, int nanos) throws InterruptedException; public voidinterrupt
(); public booleanisInterrupted
(); public static booleaninterrupted
(); public static ThreadcurrentThread
(); public static intactiveCount
(); // deprecated public static intenumerate
(Thread tarray[]); // deprecated public static voiddumpStack
(); public static voidyield
(); public static voidsleep
(long millis)
throws InterruptedException; public static voidsleep
(long millis, int nanos)
throws InterruptedException; public voiddestroy
(); }
Thread
объект создается, поток, который он представляет, еще не является активным. Это активируется, когда некоторый другой поток вызывает start
метод (§20.20.14) Thread
объект. Это вызывает поток, представленный Thread
объект вызвать run
метод (§20.20.13) Thread
объект. Недавно активированный поток тогда остается живым, пока он не останавливается, потому что одна из пяти вещей происходит:
run
метод недавно активированным потоком обычно завершается посредством нормального возврата из run
метод.
run
метод недавно активированным потоком завершается резко, потому что исключение было выдано.
stop
метод (§20.20.15) Thread
объект (и менеджер безопасности (§20.17.11) одобряет выполнение stop
работа).
stop
метод Thread
объект (и менеджер безопасности (§20.17.11) одобряет выполнение stop
работа).
exit
метод (§20.16.2) класса Runtime
(и менеджер безопасности (§20.17.13) одобряет выполнение exit
работа); это останавливает каждый поток, выполняемый виртуальной машиной Java, которая выполняет поток, который вызывает exit
метод. notifyAll
метод (§20.1.10) вызывается для Thread
объект, который представляет это; этот факт важен для правильного функционирования join
методы (§20.20.28, §20.20.29, §20.20.30). Поток также удаляется из его группы потока, как он умирает. Как только поток был остановлен, это больше не живо, и это не может быть перезапущено.
Поток, который жив, может быть приостановлен и возобновлен. Приостановленный поток, как полагают, жив, но он не выполняет работы, не делает успехов, не выполняет инструкций виртуальной машины. Возобновление восстанавливает поток к состоянию активного выполнения. Поток приостанавливается, когда он или другой поток вызывает suspend
метод (§20.20.17) Thread
объект, который представляет это (и менеджер безопасности (§20.17.11) одобряет выполнение suspend
работа). Поток возобновляется, когда другой поток вызывает resume
метод (§20.20.18) Thread
объект, который представляет это (и менеджер безопасности (§20.17.11) одобряет выполнение resume
работа).
У каждого потока есть приоритет. Когда есть соревнование за обработку ресурсов, потоки с более высоким приоритетом обычно выполняются в предпочтении к потокам с более низким приоритетом. Такое предпочтение не является, однако, гарантией, что самый высокий приоритетный поток будет всегда работать, и распараллеливают приоритеты, не может использоваться, чтобы реализовать взаимное исключение. Когда код, работающий в некотором потоке, создает новое Thread
объект, у недавно создаваемого потока есть свой приоритет первоначально набор, равный приоритету потока создания. Но приоритет потока T может быть изменен в любое время, если некоторый поток вызывает setPriority
метод Thread
объект, который представляет T (и менеджер безопасности (§20.17.11) одобряет выполнение setPriority
работа).
Каждый поток может или не может быть отмечен как демон. Когда код, работающий в некотором потоке, создает новое Thread
объект, недавно создаваемый поток является потоком демона, если и только если поток создания является демоном. Но daemonhood потока T может быть изменен прежде, чем он будет активирован, если некоторый другой поток вызывает setDaemon
метод Thread
объект, который представляет T (и менеджер безопасности (§20.17.11) одобряет выполнение setDaemon
работа).
Когда виртуальная машина Java запускает, обычно есть единственный поток недемона, который обычно начинается, вызывая метод main
из некоторого определяемого класса. Виртуальная машина Java продолжает выполнять потоки согласно модели выполнения потока до всех потоков, которые не являются потоками демона, остановились.
Есть два способа создать новый поток выполнения. Нужно объявить, что некоторый класс подкласс 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
метод. Экземпляр класса может тогда быть создан, использоваться, чтобы создать a 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
String
, в целях идентификации. Больше чем у одного потока может быть то же самое имя. Если имя не определяется, когда поток создается, новое имя сгенерировано для этого.
Каждый поток, который еще не был остановлен, принадлежит группе потока (§20.21). Поток может всегда создавать новый поток в своей собственной группе потока. Создать поток в некоторой другой группе потока требует одобрения checkAccess
метод (§20.21.4) той группы потока, который вперед решение к менеджеру безопасности (§20.17.11).
20.20.1 public final static int
MIN_PRIORITY
= 1;
Постоянная величина этого поля 1
, наименьший позволенный приоритет для потока.
20.20.2 public final static int
MAX_PRIORITY
= 10;
Постоянная величина этого поля 10
, самый большой позволенный приоритет оценивает за поток.
20.20.3 public final static int
NORM_PRIORITY
= 5;
Постоянная величина этого поля 5
, нормальный приоритет для потока, который не является демоном.
20.20.4 public
Thread
()
Этот конструктор инициализирует недавно создаваемый Thread
возразите так, чтобы это не имело никакого отдельного объекта выполнения, имело недавно сгенерированное имя, и принадлежало той же самой группе потока как поток, который создает новый поток.
Этот конструктор имеет точно тот же самый эффект как явный вызов конструктора this(null, null,
gname)
(§20.20.10), где gname является недавно сгенерированным именем. Автоматически сгенерированные имена имеют форму "Thread-"+
n, где n является целым числом.
20.20.5 public
Thread
(String name)
Этот конструктор инициализирует недавно создаваемый Thread
возразите так, чтобы у этого не было никакого отдельного объекта выполнения, имеет указанное name
как его имя, и принадлежит той же самой группе потока как поток, который создает новый поток.
Этот конструктор имеет точно тот же самый эффект как явный вызов конструктора this(null,
null,
name)
(§20.20.10).
20.20.6 public
Thread
(Runnable runObject)
Этот конструктор инициализирует недавно создаваемый Thread
возразите так, чтобы у этого был данный runObject
как его отдельный объект выполнения, имеет недавно сгенерированное имя, и принадлежит той же самой группе потока как поток, который создает новый поток.
Этот конструктор имеет точно тот же самый эффект как явный вызов конструктора this(null,
runObject,
gname)
(§20.20.10), где gname является недавно сгенерированным именем. Автоматически сгенерированные имена имеют форму "Thread-"+
n, где n является целым числом.
20.20.7 public
Thread
(Runnable runObject, String name)
Этот конструктор инициализирует недавно создаваемый Thread
возразите так, чтобы у этого был данный runObject
как его отдельный объект выполнения, имеет указанное name
как его имя, и принадлежит той же самой группе потока как поток, который создает новый поток.
Этот конструктор имеет точно тот же самый эффект как явный вызов конструктора this(null,
runObject,
name)
(§20.20.10).
20.20.8 public
Thread
(ThreadGroup group, String name)
throws SecurityException, IllegalThreadStateException
Во-первых, если группа не null
, checkAccess
метод (§20.21.4) той группы потока вызывают без параметров.
Этот конструктор инициализирует недавно создаваемый Thread
возразите так, чтобы у этого не было никакого отдельного объекта выполнения, имеет указанное name
как его имя, и принадлежит группе потока, упомянутой group
(но если group
null
, тогда новый поток будет принадлежать той же самой группе потока как поток, который создает новый поток).
Если group
a ThreadGroup
это было уничтожено методом destroy
(§20.21.11), затем IllegalThreadStateException
бросается.
Этот конструктор имеет точно тот же самый эффект как явный вызов конструктора Thread(group,
null,
name)
(§20.20.10).
20.20.9 public
Thread
(ThreadGroup group, Runnable runObject)
throws SecurityException, IllegalThreadStateException
Во-первых, если группа не null
, checkAccess
метод (§20.21.4) той группы потока вызывают без параметров.
Этот конструктор инициализирует недавно создаваемый Thread
возразите так, чтобы у этого был данный runObject
как его отдельный объект выполнения, имеет недавно сгенерированное имя, и принадлежит группе потока, упомянутой group
(но если group
null
, тогда новый поток будет принадлежать той же самой группе потока как поток, который создает новый поток).
Если group
a ThreadGroup
это было уничтожено методом destroy
(§20.21.11), затем IllegalThreadStateException
бросается.
Этот конструктор имеет точно тот же самый эффект как явный вызов конструктора this(group,
runObject,
gname)
(§20.20.10), где gname является недавно сгенерированным именем. Автоматически сгенерированные имена имеют форму "Thread-"+
n, где n является целым числом.
20.20.10 public
Thread
(ThreadGroup group, Runnable runObject,
String name)
throws SecurityException, IllegalThreadStateException
Во-первых, если группа не null
, checkAccess
метод (§20.21.4) той группы потока вызывают без параметров; это может привести к a SecurityException
быть брошенным.
Этот конструктор инициализирует недавно создаваемый Thread
возразите так, чтобы у этого был данный runObject
как его отдельный объект выполнения, имеет указанное name
как его имя, и принадлежит группе потока, упомянутой group
(но если group
null
, тогда новый поток будет принадлежать той же самой группе потока как поток, который создает новый поток).
Если group
a ThreadGroup
это было уничтожено методом destroy
(§20.21.11), затем IllegalThreadStateException
бросается.
Приоритет недавно создаваемого потока устанавливается равный приоритету потока создания - то есть, в настоящий момент рабочего потока. Метод setPriority
(§20.20.23) может использоваться, чтобы изменить приоритет на новое значение.
Недавно создаваемый поток первоначально отмечается как являющийся потоком демона, если и только если поток, создающий его, является потоком демона. Метод setDaemon
(§20.20.25) может использоваться, чтобы измениться, является ли поток демоном.
20.20.11 public String
toString
()
Возвращенное значение является связью следующих семи строк:
"Thread["
","
","
"]"
Переопределения toString
метод Object
(§20.1.3).
20.20.12 public void
checkAccess
() throws SecurityException
Если есть менеджер безопасности, checkAccess
метод (§20.17.11) вызывают с этим Thread
возразите как его параметр. Это может привести к a SecurityException
будучи брошенным в текущий поток.
Этот метод вызывают методы stop
ни из каких параметров (§20.20.15), stop
из одного параметра (§20.20.16), suspend
(§20.20.17), resume
(§20.20.18), setName
(§20.20.20), setPriority
(§20.20.23), и setDaemon
(§20.20.25).
20.20.13 public void
run
()
Общий контракт этого метода - то, что он должен выполнить намеченное действие потока.
run
метод класса Thread
просто вызовы run
метод отдельного объекта выполнения, если есть тот; иначе, это ничего не делает.
20.20.14 public void
start
()
throws IllegalThreadStateException
Вызов этого метода заставляет этот поток начинать выполнение; этот поток вызывает run
метод этого Thread
объект. Результат состоит в том, что два потока работают одновременно: текущий поток (который возвращается из звонка start
метод), и поток представляется этим Thread
объект (который выполняет run
метод).
20.20.15 public final void
stop
()
throws SecurityException
Во-первых, checkAccess
метод (§20.20.12) этого Thread
объект вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Этот поток вынуждается завершиться неправильно независимо от того, что он делал и бросить a ThreadDeath
возразите как исключение. С этой целью этот поток возобновляется, если он был приостановлен, и пробуждается, если это спало.
Разрешается остановить поток, который еще не был запущен. Если поток будет в конечном счете запущен, то он сразу завершится.
Пользовательский код не должен обычно пытаться поймать ThreadDeath
если некоторая экстраординарная работа уборки не необходима (отметьте что процесс броска a ThreadDeath
исключение вызовет finally
пункты try
операторы, которые будут выполнены перед потоком официально, умирают). Если a catch
пункт действительно ловит a ThreadDeath
объект, важно повторно бросить объект так, чтобы поток фактически умер. Высокоуровневый обработчик ошибок, который реагирует на иначе непойманные исключения, не будет печатать сообщение или иначе сигнализировать или уведомлять пользователя, если непойманное исключение будет экземпляром ThreadDeath
.
20.20.16 public final void
stop
(Throwable thr)
throws SecurityException, NullPointerException
Во-первых, checkAccess
метод (§20.20.12) этого Thread
объект вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Если параметр thr
нуль, тогда a NullPointerException
бросается (в текущем потоке).
Этот поток вынуждается завершиться неправильно независимо от того, что он делал и бросить Throwable
объект thr
как исключение. С этой целью этот поток возобновляется, если он был приостановлен, и пробуждается, если это спало. Это - необычное действие, чтобы взять; обычно, stop
метод, который не берет параметров (§20.20.15), должен использоваться.
Разрешается остановить поток, который еще не был запущен. Если поток будет в конечном счете запущен, то он сразу завершится.
20.20.17 public final void
suspend
()
throws SecurityException
Во-первых, checkAccess
метод (§20.20.12) этого Thread
объект вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Если этот поток жив (§20.20.26), он приостанавливается и не делает дальнейших успехов, только после того как он возобновляется. Разрешается приостановить поток, который уже находится в состоянии ожидания; это остается приостановленным. Приостановкам не соответствуют; даже если поток приостанавливается не раз, только один звонок resume
обязан возобновлять это.
20.20.18 public final void
resume
()
throws SecurityException
Во-первых, checkAccess
метод (§20.20.12) этого Thread
объект вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Если этот поток жив (§20.20.26), но приостановленный, это возобновляется и разрешается сделать успехи в его выполнении. Разрешается возобновить поток, который никогда не приостанавливался или был уже возобновлен; это продолжает делать успехи в его выполнении. Возобновлению не соответствуют; даже если поток возобновляется не раз, только один звонок suspend
обязан приостанавливать это.
20.20.19 public final String
getName
()
Текущее имя этого Thread
объект возвращается как a String
.
20.20.20 public final void
setName
(String name)
throws SecurityException
Во-первых, checkAccess
метод (§20.20.12) этого Thread
объект вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Имя этого Thread
объект изменяется, чтобы быть равным параметру name
.
20.20.21 public final ThreadGroup
getThreadGroup
()
Если этот поток жив, этот метод возвращает ссылку на ThreadGroup
объект, который представляет группу потока, которой принадлежит этот поток. Если этот поток умер (был остановлен), этот метод возвраты null
.
20.20.22 public final int
getPriority
()
Текущий приоритет этого Thread
объект возвращается.
20.20.23 public final void
setPriority
(int newPriority)
throws SecurityException, IllegalArgumentException
Во-первых, checkAccess
метод (§20.20.12) этого Thread
объект вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Если newPriority
параметром являются меньше чем MIN_PRIORITY
(§20.20.1) или больше чем MAX_PRIORITY
(§20.20.2), затем IllegalArgumentException
бросается.
Иначе, приоритет этого Thread
объект устанавливается в меньшие из указанных newPriority
и максимальный разрешенный приоритет (§20.21.12) группы потока потока (§20.20.21).
20.20.24 public final boolean
isDaemon
()
Результат true
если и только если этот поток отмечается как поток демона.
20.20.25 public final void
setDaemon
(boolean on)
throws SecurityException, IllegalThreadStateException
Во-первых, checkAccess
метод (§20.20.12) этого Thread
объект вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Если этот поток жив, IllegalThreadStateException
бросается. Иначе, этот поток отмечается как являющийся потоком демона, если параметр true
, и как не являющийся демоном распараллеливают, если параметр false
.
20.20.26 public final boolean
isAlive
()
Результат true
если и только если этот поток жив (он был запущен и еще не умер).
20.20.27 public int
countStackFrames
()
Этот метод возвращает число стековых фреймов виртуальной машины Java, в настоящий момент активных для этого потока.
20.20.28 public final void
join
() throws InterruptedException
Этот метод заставляет текущий поток ожидать (использование wait
метод (§20.1.6) класса Object
) пока этот поток больше не жив.
Если текущий поток прерывается (§20.20.31) другим потоком, в то время как это ожидает, то ожидание заканчивается и InterruptedException
бросается.
20.20.29 public final void
join
(long millis)
throws InterruptedException
Этот метод заставляет текущий поток ожидать (использование wait
метод (§20.1.7) класса Object
) или до этот поток больше не жив или до определенное количество реального времени, протек, более или менее.
Количеством реального времени, измеренного в миллисекундах, дают millis
. Если millis
нуль, однако, тогда реальное время не учитывается, и этот метод просто ожидает, пока этот поток больше не жив.
Если текущий поток прерывается (§20.20.31) другим потоком, в то время как это ожидает, то ожидание заканчивается и InterruptedException
бросается.
20.20.30 public final void
join
(long millis, int nanos)
throws InterruptedException
Этот метод заставляет текущий поток ожидать (использование wait
метод (§20.1.8) класса Object
) или до этот поток больше не жив или до определенное количество реального времени, протек, более или менее.
Количеством реального времени, измеренного в наносекундах, дают:
1000000*millis+nanos
Во всех других отношениях этот метод делает ту же самую вещь как метод join
из одного параметра (§20.20.29). В частности join(0,
0)
означает ту же самую вещь как join(0)
. Если текущий поток прерывается (§20.20.31) другим потоком, в то время как это ожидает, то ожидание заканчивается и InterruptedException
бросается.
20.20.31 public void
interrupt
()
Запрос на прерывание отправляется для этого потока. Этот поток не обязательно сразу реагирует на прерывание, как бы то ни было. Если этот поток ожидает, он пробуждается, и он тогда бросает InterruptedException
.
[Этот метод планируется для введения в версии 1.1 Java.]
20.20.32 public boolean
isInterrupted
()
Результат true
если и только если запрос на прерывание был отправлен для этого потока.
[Этот метод планируется для введения в версии 1.1 Java.]
20.20.33 public static boolean
interrupted
()
Результат true
если и только если запрос на прерывание был отправлен для текущего потока.
[Этот метод планируется для введения в версии 1.1 Java.]
20.20.34 public static Thread
currentThread
()
Thread
объект, который представляет текущий поток, возвращается.
20.20.35 public static int
activeCount
()
Этот метод возвращает число активных потоков в группе потока, которой принадлежит текущий поток. Это количество включает потоки в подгруппы той группы потока. Это - то же самое как значение выражения:
Threads.currentThread().getThreadGroup().activeCount()[Этот метод осуждается для использования в новом коде после того, как версия 1.1 Java становится доступной. Вместо этого выражение, эквивалентное:
Threads.currentThread().getThreadGroup().allThreadsCount()должен использоваться. См. метод
allThreadsCount
из класса ThreadGroup
.] 20.20.36 public static int
enumerate
(Thread tarray[])
Активные потоки в группе потока, которой текущий поток принадлежит, включая потоки в подгруппах той группы потока, перечисляются, и их объекты Потока помещаются в массив tarray
. Число потоков, фактически помещенных в массив, возвращается. Вызовите это значение n; тогда потоки были помещены в элементы 0
через n-1
из tarray
. Если число потоков превышает длину tarray
, тогда некоторые из потоков, tarray.length
из них, выбираются произвольно и используются, чтобы заполнить массив tarray
.
[Этот метод осуждается для использования в новом коде после того, как версия 1.1 Java становится доступной. Вместо этого выражение, эквивалентное:
Threads.currentThread().getThreadGroup().allThreads()должен использоваться. См. метод
allThreads
из класса ThreadGroup
.] 20.20.37 public static void
dumpStack
()
Это - служебный метод, который облегчает печатать дамп стека для текущего потока. Это эквивалентно в действительности:
new Exception("Stack trace").printStackTrace()См.
printStackTrace
метод (§20.22.6) класса Throwable
. 20.20.38 public static void
yield
()
Этот метод заставляет текущий поток уступать, позволяя планировщика потока выбрать другой выполнимый поток для выполнения.
20.20.39 public static void
sleep
(long millis)
throws InterruptedException
Этот метод заставляет текущий поток уступать а не планироваться для дальнейшего выполнения, пока определенное количество реального времени не протекло, более или менее.
Количеством реального времени, измеренного в миллисекундах, дают millis
.
Если текущий поток прерывается (§20.20.31) другим потоком, в то время как это ожидает, то сон заканчивается и InterruptedException
бросается.
20.20.40 public static void
sleep
(long millis, int nanos)
throws InterruptedException
Этот метод заставляет текущий поток уступать а не планироваться для дальнейшего выполнения, пока определенное количество реального времени не протекло, более или менее.
Количеством реального времени, измеренного в наносекундах, дают:
1000000*millis+nanos
Во всех других отношениях этот метод делает ту же самую вещь как метод sleep
из одного параметра (§20.20.39). В частности sleep(0,
0)
означает ту же самую вещь как sleep(0)
. Если текущий поток прерывается (§20.20.31) другим потоком, в то время как это ожидает, то сон заканчивается и InterruptedException
бросается.
20.20.41 public void destroy()
throws SecurityException
Во-первых, checkAccess
метод (§20.20.12) этого Thread
объект вызывают без параметров. Это может привести к броску a SecurityException
(в текущем потоке).
Затем уничтожает этот поток, без любой уборки. Любые мониторы, которые заблокировал поток, остаются заблокированными.
[Этот метод не реализуется в ранних версиях Java, до 1.1.]
Содержание | Предыдущий | Следующий | Индекс
Спецификация языка Java (HTML, сгенерированный Блинчиком "сюзет" Pelouch 24 февраля 1998)
Авторское право © Sun Microsystems, Inc 1996 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к doug.kramer@sun.com