|
Spec-Zone .ru
спецификации, руководства, описания, API
|
java.lang.Thread В описаниях метода, которые следуют, очень важно различить среди "текущего потока" (поток, выполняющий метод), "это Thread"(объект, для которого был вызван метод), и "этот поток" (поток, который представляется Thread объект, для которого метод был вызван).
public classКогда новоеThreadimplements 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