|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 차의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요 : 상자 | 필드 | 생성자 | 메소드 | 상세 : 필드 | 생성자 | 메소드 |
java.lang.Objectjava.lang.Thread
public class Thread
「thread」란, 프로그램내에서의 실행 thread입니다. Java 가상 머신에서는, 어플리케이션은 병렬에 실행되는 복수의 thread를 사용할 수가 있습니다.
각 thread에는 우선 순위를 붙일 수 있고 있습니다. 우선 순위의 높은 thread는, 우선 순위의 낮은 thread보다 우선해 실행됩니다. 게다가 각 thread가 demon로서 마크 되고 있는 경우도 있으면, 되어 있지 않은 경우도 있습니다. 어느 thread로 실행중의 코드가 새로운 Thread
객체를 작성하면(자), 이 새로운 thread에는, 그 시점에서는, 작성측의 thread의 우선 순위에 동일한 우선 순위가 설정되어 작성측 thread가 demon인 경우에만, demon thread.
일반적으로, Java 가상 머신이 기동하는 (일반적으로는 있는 지정된 클래스의 main
라는 이름이 붙일 수 있었던 메소드를 호출한다)와 demon thread가 아닌 thread가 1 개 존재합니다. Java 가상 머신은, 이하의 어떤 것인가의 조건이 발생할 때까지 thread를 계속 실행합니다.
Runtime
클래스의 exit
메소드가 불려 가 시큐리티 매니저가 exit 동작을 허가했을 경우
run
메소드의 호출로부터 복귀하는 것에 의해, 또는 run
메소드 이외로부터 보내지는 예외를 throw 하는 것에 의해, demon thread는 아닌 모든 thread가 종료했을 경우
새로운 실행의 thread를 작성하려면 2 방법의 방법이 있습니다. 1 개의 방법은, 클래스를 Thread
의 서브 클래스이다고 선언하는 것입니다. 이 서브 클래스는,Thread
클래스의 run
메소드를 오버라이드(override) 하지 않으면 안됩니다. 그러면 서브 클래스의 인스턴스는 할당할 수 있어 기동될 수가 있습니다. 예를 들어, 초기치보다 큰 소수를 계산하는 thread는, 다음에 나타내도록(듯이) 해 작성할 수 있습니다.
class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }
다음에, 다음에 나타내는 코드로 thread를 작성해, thread의 실행을 개시합니다.
PrimeThread p = new PrimeThread(143); p.start();
thread를 작성하는 이제(벌써) 1 개의 방법은,Runnable
인터페이스를 구현하는 클래스를 선언하는 것입니다. 그렇다면, 그 클래스는,run
메소드를 구현합니다. 클래스의 인스턴스를 할당할 수 있어Thread
의 작성시에 인수로서 건네받아 개시됩니다. 이 방법에서의 같은 예는, 다음에 나타내게 됩니다.
class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }
다음에, 다음에 나타내는 코드로 thread를 작성해, thread의 실행을 개시합니다.
PrimeRun p = new PrimeRun(143); new Thread(p). start();
각 thread는 식별을 위한 이름을 가집니다. 복수의 thread가 같은 이름을 가지는 일이 있습니다. thread의 작성시에 이름이 지정되지 않으면 thread에는 새로운 이름이 생성됩니다.
Runnable
,
Runtime.exit(int)
,
run()
,
stop()
상자의 클래스의 개요 | |
---|---|
static class |
Thread.State
thread 상태입니다. |
static interface |
Thread.UncaughtExceptionHandler
캐치 되지 않는 예외에 의해,Thread 가 돌연 종료했을 때에 불려 가는 것 핸들러의 인터페이스입니다. |
필드의 개요 | |
---|---|
static int |
MAX_PRIORITY
thread로 설정할 수 있는 최고 우선 순위입니다. |
static int |
MIN_PRIORITY
thread로 설정할 수 있는 최저 우선 순위입니다. |
static int |
NORM_PRIORITY
thread에 할당할 수 있는 디폴트의 우선 순위입니다. |
생성자 의 개요 | |
---|---|
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)
그 실행 객체로서 target , 이름으로서 지정된 name 를 가지는,group 에 의해 참조되는 thread 그룹에 속하는 것 같은, 새로운 Thread 객체를 할당합니다. |
|
Thread (ThreadGroup group,
Runnable target,
String name,
long stackSize)
새로운 Thread 객체를 할당해 실행 객체로서 target 를 보관 유지해, 지정된 name 를 이름으로서 보관 유지하도록(듯이) 합니다. |
|
Thread (ThreadGroup group,
String name)
새로운 Thread 객체를 할당합니다. |
메소드의 개요 | |
---|---|
static int |
activeCount ()
현행 thread의 thread 그룹내의 액티브한 thread수를 돌려줍니다. |
void |
checkAccess ()
현재 실행중의 thread가, 이 thread를 변경하기 위한 액세스권을 가지고 있을지 어떨지를 판정합니다. |
int |
countStackFrames ()
추천 되고 있지 않습니다. 이 호출의 정의는, 추천되어 있지 않은 suspend() 에 의존합니다.
또, 이 호출의 결과는 보증되지 않습니다. |
static Thread |
currentThread ()
현재 실행중의 thread 객체의 참조를 돌려줍니다. |
void |
destroy ()
추천 되고 있지 않습니다. 이 메소드는 원래 클린 업없이 파기되도록(듯이) 설계되고 있었습니다. 보관 유지되는 모니터는 락 된 상태를 유지합니다. 다만, 이 메소드는 구현되지 않았습니다. 구현되고 있으면(자), suspend() 와 거의 똑같이 데드락이 발생합니다.
타겟 thread가 중요한 system resource를 보호하는 락을 보관 유지한 상태로 파기되었을 경우, 어느 thread도 다시 이 자원에 액세스 할 수 없습니다.
다른 thread가 이 자원을 잠그려고 하면(자), 데드락이 발생합니다. 일반적으로, 이러한 데드락은, 프로세스의 「동결」에 의해 밝혀집니다. 자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유 |
static void |
dumpStack ()
현재의 thread의 스택 트레이스를 표준 에러 스트림에 출력합니다. |
static int |
enumerate (Thread [] tarray)
현행 thread의 thread 그룹 및 그 하위 그룹내의 모든 액티브한 thread를, 지정된 배열에 카피합니다. |
static Map <Thread ,StackTraceElement []> |
getAllStackTraces ()
모든 라이브 thread의 스택 트레이스 맵을 돌려줍니다. |
ClassLoader |
getContextClassLoader ()
이 Thread 의 문맥 ClassLoader 를 돌려줍니다. |
static Thread.UncaughtExceptionHandler |
getDefaultUncaughtExceptionHandler ()
캐치 되지 않는 예외에 의해 thread가 돌연 종료했을 때에 불려 가는 디폴트의 핸들러를 돌려줍니다. |
long |
getId ()
이 thread의 식별자를 돌려줍니다. |
String |
getName ()
이 thread의 이름을 돌려줍니다. |
int |
getPriority ()
이 thread의 우선 순위를 돌려줍니다. |
StackTraceElement [] |
getStackTrace ()
이 thread의 스택 덤프를 나타내는 스택 트레이스 요소의 배열을 돌려줍니다. |
Thread.State |
getState ()
이 thread 상태를 돌려줍니다. |
ThreadGroup |
getThreadGroup ()
이 thread가 소속하는 thread 그룹을 돌려줍니다. |
Thread.UncaughtExceptionHandler |
getUncaughtExceptionHandler ()
캐치 되지 않는 예외에 의해 thread가 돌연 종료했을 때에 불려 가는 핸들러를 돌려줍니다. |
static boolean |
holdsLock (Object obj)
현행 thread가 지정된 객체에 대한 모니터 락을 보관 유지하는 경우에게만,true 를 돌려줍니다. |
void |
interrupt ()
이 thread에 끼어듭니다. |
static boolean |
interrupted ()
현재의 thread가 끼어들어지고 있는지 어떤지를 조사합니다. |
boolean |
isAlive ()
이 thread가 생존하고 있을지 어떨지를 판정합니다. |
boolean |
isDaemon ()
이 thread가 demon thread일지 어떨지를 판정합니다. |
boolean |
isInterrupted ()
이 thread가 끼어들어지고 있는 제발을 조사합니다. |
void |
join ()
이 thread가 종료하는 것을 대기합니다. |
void |
join (long millis)
이 thread가 종료하는 것을, 최고로 millis 밀리 세컨드 대기합니다. |
void |
join (long millis,
int nanos)
최고로 millis 밀리 세컨드에 nanos 나노초를 가산한 사이, 이 thread가 종료하는 것을 대기합니다. |
void |
resume ()
추천 되고 있지 않습니다. 이 메소드는 데드락을 발생하기 쉽기 때문에 추천 되지 않습니다. suspend() 와 함께 사용하기 위해(때문에)인 만큼 제공되고 있습니다.
자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유 |
void |
run ()
이 thread가 별개의 Runnable 실행 객체를 사용해 작성되었을 경우, 그 Runnable 객체의 run 메소드가 불려 갑니다. |
void |
setContextClassLoader (ClassLoader cl)
이 Thread 의 문맥 ClassLoader 를 설정합니다. |
void |
setDaemon (boolean on)
이 thread를, demon thread 또는 사용자 thread로서 마크 합니다. |
static void |
setDefaultUncaughtExceptionHandler (Thread.UncaughtExceptionHandler eh)
캐치 되지 않는 예외에 의해, thread가 돌연 종료했을 때나, 이 thread에 대해서 그 밖에 핸들러가 정의되어 있지 않을 때에 불려 가는 디폴트의 핸들러를 설정합니다. |
void |
setName (String name)
이 thread의 이름을 인수 name 에 동일해지도록(듯이) 변경합니다. |
void |
setPriority (int newPriority)
이 thread의 우선 순위를 변경합니다. |
void |
setUncaughtExceptionHandler (Thread.UncaughtExceptionHandler eh)
캐치 되지 않는 예외에 의해, 돌연 thread가 종료했을 때에 사용되는 핸들러를 설정합니다. |
static void |
sleep (long millis)
시스템 타이머-와 스케쥴러가 정확한 것을 전제로서 현재 실행중의 thread를, 지정된 밀리 세컨드수의 사이, sleeve (일시적으로 실행을 정지) 시킵니다. |
static void |
sleep (long millis,
int nanos)
시스템 타이머-와 스케쥴러가 정확한 것을 전제로서 현재 실행중의 thread를, 지정된 밀리 세컨드수로 지정된 나노초수를 가산한 사이, sleeve (실행을 정지) 시킵니다. |
void |
start ()
이 thread의 실행을 개시합니다. |
void |
stop ()
추천 되고 있지 않습니다. 이 메소드는 본질적으로 안전하지는 않습니다. Thread.stop 를 사용해 thread를 정지하면(자), 체크되어 있지 않은 ThreadDeath 예외가 스택아래에서 위에게 전할 수 있었던 결과, 그 thread에 의해 락 되고 있던 모니터의 락이 모두 해제됩니다. 이러한 모니터에 의해 직전까지 보호되고 있던 객체가 무결성의 없는 상태에 있었을 경우, 망가진 객체는 다른 thread에 대해서 가시가 되어, 동작이 보증되지 않는 것이 있습니다. 많은 경우, 타겟 thread의 실행 정지를 지시하려면 ,stop 는 아니고, 단지 일부의 변수를 변경하는 코드를 사용할 필요가 있습니다. 타겟 thread는, 이 변수를 정기적으로 검사해, 실행을 정지해야 할 일을 변수가 가리키고 있는 경우에는, thread의 run 메소드로부터 일반적으로의 방법으로 복귀할 필요가 있습니다. 조건 변수등으로 타겟 thread가 오랫동안 대기하고 있는 경우, 대기를 중단시키려면 ,interrupt 메소드를 사용합니다.
자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유 |
void |
stop (Throwable obj)
추천 되고 있지 않습니다. 이 메소드는 본질적으로 안전하지는 않습니다. stop() 를 참조해 주세요.
게다가 이 메소드는, 타겟 thread로 처리의 준비가 되어 있지 않은 예외의 생성에 사용되는 일이 있는 점에서도 위험합니다 (이 메소드가 없으면 thread에 의해 throw 될리가 없는, 체크된 예외 등).
자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유 |
void |
suspend ()
추천 되고 있지 않습니다. 이 메소드는 데드락을 발생하기 쉽기 때문에 추천 되지 않습니다. 타겟 thread가, 중단되는 시점에서, 중요한 system resource를 보호하는 모니터를 잠그고 있는 경우, 타겟 thread가 재개될 때까지 어느 thread도 그 자원에 액세스 할 수 없습니다. 이 때, 타겟 thread를 재개하는 thread가, resume 를 호출하기 전에 이 모니터를 잠그려고 하면(자), 데드락이 발생합니다. 일반적으로, 이러한 데드락은, 프로세스의 「동결」에 의해 밝혀집니다.
자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유 |
String |
toString ()
thread의 이름, 우선 순위, thread 그룹을 포함한 이 thread의 캐릭터 라인 표현을 돌려줍니다. |
static void |
yield ()
현재 실행중의 thread 객체를 일시적으로 휴지시켜, 다른 thread를 실행할 수 있도록(듯이) 합니다. |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , equals , finalize , getClass , hashCode , notify , notifyAll , wait , wait , wait |
필드의 상세 |
---|
public static final int MIN_PRIORITY
public static final int NORM_PRIORITY
public static final int MAX_PRIORITY
생성자 의 상세 |
---|
public Thread()
Thread
객체를 할당합니다. 이 생성자 은,Thread(null, null,
gname)
와 같은 효과를 가집니다. 이 경우,gname 는, 새롭게 작성되는 이름입니다. 자동적으로 작성되는 이름은,n 를 정수로 하면(자) "Thread-"+
n 의 형식을 취합니다.
Thread(ThreadGroup, Runnable, String)
public Thread(Runnable target)
Thread
객체를 할당합니다. 이 생성자 은,Thread(null, target,
gname)
와 같은 효과를 가집니다. 이 경우,gname 는, 새롭게 작성되는 이름입니다. 자동적으로 작성되는 이름은,n 를 정수로 하면(자) "Thread-"+
n 의 형식을 취합니다.
target
- 그 run
메소드가 불려 가는 객체Thread(ThreadGroup, Runnable, String)
public Thread(ThreadGroup group, Runnable target)
Thread
객체를 할당합니다. 이 생성자 은,Thread(group, target,
gname)
와 같은 효과를 가집니다. 이 경우,gname 는, 새롭게 작성되는 이름입니다. 자동적으로 작성되는 이름은,n 를 정수로 하면(자) "Thread-"+
n 의 형식을 취합니다.
group
- thread 그룹target
- 그 run
메소드가 불려 가는 객체
SecurityException
- 현재의 thread가, 지정된 thread 그룹내의 thread를 작성할 수 없는 경우Thread(ThreadGroup, Runnable, String)
public Thread(String name)
Thread
객체를 할당합니다. 이 생성자 은,Thread(null, null, name)
와 같은 효과를 가집니다.
name
- 새로운 thread의 이름Thread(ThreadGroup, Runnable, String)
public Thread(ThreadGroup group, String name)
Thread
객체를 할당합니다. 이 생성자 은,Thread(group, null, name)
와 같은 효과를 가집니다.
group
- thread 그룹name
- 새로운 thread의 이름
SecurityException
- 현재의 thread가, 지정된 thread 그룹내의 thread를 작성할 수 없는 경우Thread(ThreadGroup, Runnable, String)
public Thread(Runnable target, String name)
Thread
객체를 할당합니다. 이 생성자 은,Thread(null, target, name)
와 같은 효과를 가집니다.
target
- 그 run
메소드가 불려 가는 객체name
- 새로운 thread의 이름Thread(ThreadGroup, Runnable, String)
public Thread(ThreadGroup group, Runnable target, String name)
target
, 이름으로서 지정된 name
를 가지는,group
에 의해 참조되는 thread 그룹에 속하는 것 같은, 새로운 Thread
객체를 할당합니다.
group
가 null
로, 시큐리티 매니저가 존재하는 경우, 그룹은 시큐리티 매니저의 getThreadGroup
메소드에 의해 정해집니다. group
가 null
로 시큐리티 매니저가 존재하지 않는 경우, 또는 시큐리티 매니저의 getThreadGroup
메소드가 null
를 돌려주는 경우, 그룹은 신규 thread를 작성중의 thread와 같은 ThreadGroup 로 설정됩니다.
시큐리티 매니저가 존재하는 경우는, ThreadGroup 를 인수로서 건네주어 checkAccess
메소드를 호출합니다.
또,getContextClassLoader
메소드 또는 setContextClassLoader
메소드를 오버라이드(override) 하는 서브 클래스의 생성자 에 의해 직접적 또는 간접적으로 불려 갔을 때,RuntimePermission("enableContextClassLoaderOverride")
액세스권을 사용해 checkPermission
메소드를 호출합니다. 그 결과, SecurityException 가 발생하는 일이 있습니다.
target
인수가 null
가 아닌 경우, 이 thread가 기동되면(자) target
의 run
메소드가 불려 갑니다. target 인수가 null
인 경우는, 이 thread가 기동될 때 이 thread의 run
메소드가 불려 갑니다.
새롭게 작성된 thread의 우선 순위는, 그 thread를 작성한 thread, 즉 현재 실행중의 thread의 우선 순위와 같게 설정됩니다. 이 우선 순위를 새로운 값으로 변경하는 경우는,setPriority
메소드를 사용할 수 있습니다.
새롭게 작성된 thread는, 그것을 작성하는 thread가 demon thread와 마크 되고 있는 경우에만, demon thread와 마크 됩니다. thread가 demon일지 어떨지를 변경하는 경우는,setDaemon
메소드를 사용할 수 있습니다.
group
- thread 그룹target
- 그 run
메소드가 불려 가는 객체name
- 새로운 thread의 이름
SecurityException
- 현재의 thread가, 지정된 thread 그룹내에 thread를 작성할 수 없는, 또는 문맥 클래스 로더의 메소드를 오버라이드(override) 할 수 없는 경우Runnable.run()
,
run()
,
setDaemon(boolean)
,
setPriority(int)
,
ThreadGroup.checkAccess()
,
SecurityManager.checkAccess(java.lang.Thread)
public Thread(ThreadGroup group, Runnable target, String name, long stackSize)
Thread
객체를 할당해 실행 객체로서 target
를 보관 유지해, 지정된 name
를 이름으로서 보관 유지하도록(듯이) 합니다. 또,group
에 의해 참조되는 thread 그룹에 소속해, 지정된 「스택 사이즈」를 보관 유지합니다.
이 생성자 은, thread의 스택 사이즈 지정이 가능한 점을 제외해,Thread(ThreadGroup, Runnable, String)
와 같습니다. 스택 사이즈는, 가상 머신을 이 thread의 스택에 할당하는 address 공간의 대략의 바이트수가 됩니다. stackSize 파라미터가 존재하는 경우, 그 효과는 플랫폼에 의해 크게 다릅니다.
몇개의 플랫폼에서는,stackSize 파라미터에 의해 큰 값을 지정하는 것으로, thread가 StackOverflowError
를 throw 하기 전에 의해 큰 회귀 심도를 달성하는 것이 가능하게 됩니다. 같이보다 작은 값을 지정하는 것으로, 보다 많은 thread가 OutOfMemoryError
(또는 다른 내부 에러)를 throw 하지 않고 , 병행해 존재하는 것이 가능하게 됩니다. stackSize 파라미터의 값과 최대 회귀 심도나 병행 레벨과의 관계는 플랫폼에 따라서 다릅니다. 플랫폼에 따라서는,stackSize 파라미터의 값이 어떤 영향을 주지 않는 경우가 있습니다.
가상 머신은,stackSize 파라미터를 자유롭게 취급해, 지시할 수가 있습니다. 플랫폼에서는 지정된 값이 너무 작은 경우, 가상 머신은 대신에 플랫폼 고유의 최소치를 사용할 수 있습니다. 지정된 값이 너무 큰 경우에는, 가상 머신은 대신에 플랫폼 고유의 최대치를 사용할 수 있습니다. 같이 가상 머신은, 적절한 경우에는 지정된 값의 절상해 또는 인하를 자유롭게 실행 (또는 완전하게 무시)할 수 있습니다.
stackSize 파라미터에 값제로를 지정하면(자), 이 생성자 은 Thread(ThreadGroup, Runnable, String) 생성자 과 정확하게 같은 동작을 실행합니다.
이 생성자 의 동작은 플랫폼에 따라서 다르기 위해서(때문에), 신중하게 사용할 필요가 있습니다. 지정된 계산의 실행에 필요한 thread 스택 사이즈는, JRE 구현에 따라서 다를 가능성이 있습니다. 이 때문에, 스택 사이즈 파라미터를 주의 깊게 튜닝 하거나 어플리케이션을 실행하는 JRE 구현 마다 튜닝을 반복하거나 하는 것이 필요한 경우가 있습니다.
구현상의 주의 :Java 플랫폼 구현자는,stackSize parameter 를 기준으로 해 구현의 동작을 문서화해 두는 것을 추천합니다.
group
- thread 그룹target
- 그 run
메소드가 불려 가는 객체name
- 새로운 thread의 이름stackSize
- 신규 thread의 스택 사이즈 또는 제로 (이 파라미터를 무시하는 것을 나타낸다)
SecurityException
- 현재의 thread가, 지정된 thread 그룹내의 thread를 작성할 수 없는 경우메소드의 상세 |
---|
public static Thread currentThread()
public static void yield()
public static void sleep(long millis) throws InterruptedException
millis
- 밀리 세컨드 단위의 sleeve 시간의 길이
InterruptedException
- 어떠한 thread가 현재의 thread에 끼어들었을 경우.
이 예외가 throw 되면(자), 현재의 thread의 「인터럽트 상태」는 클리어 되는Object.notify()
public static void sleep(long millis, int nanos) throws InterruptedException
millis
- 밀리 세컨드 단위의 sleeve 시간의 길이nanos
- sleeve하기 위한 0 ~ 999999 의 추가 나노초
IllegalArgumentException
- millis 의 값이 음수의 경우, 또는 nanos 의 값이 0 ~ 999999 의 범위외의 경우
InterruptedException
- 어떠한 thread가 현재의 thread에 끼어들었을 경우.
이 예외가 throw 되면(자), 현재의 thread의 「인터럽트 상태」는 클리어 되는Object.notify()
public void start()
run
메소드를 호출합니다.
그 결과, (start
메소드에의 호출로부터 복귀한다) 현재의 thread와 (그 run
메소드를 실행한다) 다른 thread라고 하는 2 개의 thread가 병렬에 실행됩니다.
thread를 여러 차례 기동하는 것은, 결코 올바르다고는 말할 수 없습니다. 특히, thread는 실행을 끝내고 나서 재기동할 수 없습니다.
IllegalThreadStateException
- thread가 벌써 기동하고 있었을 경우run()
,
stop()
public void run()
Runnable
실행 객체를 사용해 작성되었을 경우, 그 Runnable
객체의 run
메소드가 불려 갑니다. 그렇지 않은 경우, 이 메소드는 아무것도 실시하지 않고 복귀합니다.
Thread
의 서브 클래스는, 이 메소드를 오버라이드(override) 하지 않으면 안됩니다.
Runnable
내의 run
start()
,
stop()
,
Thread(ThreadGroup, Runnable, String)
@Deprecated public final void stop()
ThreadDeath
예외가 스택아래에서 위에게 전할 수 있었던 결과, 그 thread에 의해 락 되고 있던 모니터의 락이 모두 해제됩니다. 이러한 모니터에 의해 직전까지 보호되고 있던 객체가 무결성의 없는 상태에 있었을 경우, 망가진 객체는 다른 thread에 대해서 가시가 되어, 동작이 보증되지 않는 것이 있습니다. 많은 경우, 타겟 thread의 실행 정지를 지시하려면 ,stop
는 아니고, 단지 일부의 변수를 변경하는 코드를 사용할 필요가 있습니다. 타겟 thread는, 이 변수를 정기적으로 검사해, 실행을 정지해야 할 일을 변수가 가리키고 있는 경우에는, thread의 run 메소드로부터 일반적으로의 방법으로 복귀할 필요가 있습니다. 조건 변수등으로 타겟 thread가 오랫동안 대기하고 있는 경우, 대기를 중단시키려면 ,interrupt
메소드를 사용합니다.
자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유
시큐리티 매니저가 인스톨 되고 있는 경우,this
를 인수로서 시큐리티 매니저의 checkAccess
메소드가 불려 갑니다. 이 결과, 현재의 thread로 SecurityException
가 throw 되는 일이 있습니다.
또, 이 thread가 현재의 thread와 다른 경우, 즉, 현재의 thread가 자신 이외의 thread를 정지하려고 하고 있는 경우는,RuntimePermission("stopThread")
를 인수로서 시큐리티 매니저의 checkPermission
메소드도 불려 갑니다. 이 경우에도, 현재의 thread로 SecurityException
가 throw 되는 일이 있습니다.
이 thread에 의해 나타내지는 thread는, 그것이 실행하고 있던 동작에 관계없이 강제적으로 이상 정지 당해 새롭게 생성한 ThreadDeath
객체를 예외로서 throw 합니다.
아직 기동되어 있지 않은 thread를 정지할 수가 있습니다. thread가 최종적으로 기동되자, 곧바로 종료합니다.
어플리케이션은, 일반적으로과는 다른 클린 업 동작을 실행해야 하는 경우를 제외해,ThreadDeath
를 캐치 해야 하지는 않습니다. 다만,ThreadDeath
를 throw 하면(자), thread가 정식으로 종료하기 전에 try
문의 finally
절이 실행되는 것에 주의해 주세요. catch
절이 ThreadDeath
객체를 캐치 하는 경우는, thread가 실제로 종료하도록(듯이) 객체를 throw 다시 하는 것이 중요합니다.
그렇지 않은 경우, 캐치되어 있지 않은 예외를 취급하는 최고 레벨의 에러 핸들러는, 캐치되어 있지 않은 예외가 ThreadDeath
의 인스턴스이면, 메세지를 출력하거나 어플리케이션에 통지하거나 하는 것은 하지 않습니다.
SecurityException
- 현재의 thread가 이 thread를 변경할 수 없는 경우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로 처리의 준비가 되어 있지 않은 예외의 생성에 사용되는 일이 있는 점에서도 위험합니다 (이 메소드가 없으면 thread에 의해 throw 될리가 없는, 체크된 예외 등).
자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유
시큐리티 매니저가 인스톨 되고 있는 경우, 시큐리티 매니저의 checkAccess
메소드가 불려 갑니다. 이 결과, 현재의 thread로 SecurityException
가 throw 되는 일이 있습니다.
또, 이 thread가 현재의 thread와 다른 경우, 즉, 현재의 thread가 자신 이외의 thread를 정지하려고 하고 있는 경우, 또는 obj
가 ThreadDeath
의 인스턴스가 아닌 경우는,RuntimePermission("stopThread")
를 인수로서 시큐리티 매니저의 checkPermission
메소드가 불려 갑니다. 이 경우에도, 현재의 thread로 SecurityException
가 throw 되는 일이 있습니다.
인수 obj
가 null 의 경우,NullPointerException
가 (현재의 thread내에서) throw 됩니다.
이 thread에 의해 나타내지는 thread는, 그것이 실행하는 동작에는 관계없이 강제적으로 종료되어 예외로서 Throwable
객체 obj
가 throw 됩니다. 이것은 일반적으로에서는 행해지지 않는 동작이기 (위해)때문에, 일반적으로은 인수를 설정하지 않는 stop
메소드를 사용해 주세요.
아직 기동되어 있지 않은 thread를 정지할 수가 있습니다. thread가 최종적으로 기동되자, 곧바로 종료합니다.
obj
- throw 대상의 Throwable 객체
SecurityException
- 현재의 thread가 이 thread를 변경할 수 없는 경우
NullPointerException
- obj 가 null 의 경우interrupt()
,
checkAccess()
,
run()
,
start()
,
stop()
,
SecurityManager.checkAccess(Thread)
,
SecurityManager.checkPermission(java.security.Permission)
public void interrupt()
현재의 thread가 자신에게 끼어들지 않은 한 (이 인터럽트는 허가된다), 이 thread의 checkAccess
메소드가 불려 갑니다.
이 메소드에 의해,SecurityException
가 throw 되는 경우가 있습니다. Object
클래스의 wait()
,wait(long)
, 또는 wait(long, int)
메소드의 호출해, 또는 이 클래스의 join()
,join(long)
,join(long, int)
,sleep(long)
, 또는 sleep(long, int)
메소드의 호출로 이 thread가 블록 되는 경우, 인터럽트 상태는 클리어 되어InterruptedException
를 받습니다.
에 대한 I/O 조작으로 이 thread가 블록 되는 경우, 채널은 닫혀져 thread의 인터럽트 상태가 설정됩니다. 또, thread는 interruptible channel
ClosedByInterruptException
를 받습니다.
Selector
로 이 thread가 블록 되는 경우, thread의 인터럽트 상태가 설정되어, 선택 조작으로부터 즉석에서 돌려주어집니다. 일반적으로, 반환되는 값은, 셀렉터의 wakeup
메소드가 불려 갔을 경우와 같이, 제로 이외의 값이 됩니다.
전술의 조건의 어느 것에도 들어맞지 않는 경우, 이 thread의 인터럽트 상태가 설정됩니다.
생존하고 있지 않는 thread가 인터럽트를 받는 것이, 효과를 가질 필요가 없는 경우
SecurityException
- 현재의 thread가 이 thread를 변경할 수 없는 경우public static boolean interrupted()
thread가 인터럽트의 시점에서 생존하고 있지 않았기(위해)때문에 무시된 thread에서의 인터럽트는, 이 메소드에 의해 반영되어 false 를 돌려줍니다.
true
, 그렇지 않은 경우는 false
isInterrupted()
public boolean isInterrupted()
thread가 인터럽트의 시점에서 생존하고 있지 않았기(위해)때문에 무시된 thread에서의 인터럽트는, 이 메소드에 의해 반영되어 false 를 돌려줍니다.
true
, 그렇지 않은 경우는 false
interrupted()
@Deprecated public void destroy()
suspend()
와 거의 똑같이 데드락이 발생합니다.
타겟 thread가 중요한 system resource를 보호하는 락을 보관 유지한 상태로 파기되었을 경우, 어느 thread도 다시 이 자원에 액세스 할 수 없습니다.
다른 thread가 이 자원을 잠그려고 하면(자), 데드락이 발생합니다. 일반적으로, 이러한 데드락은, 프로세스의 「동결」에 의해 밝혀집니다. 자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유
NoSuchMethodError
를 throw 합니다.
NoSuchMethodError
- alwayspublic final boolean isAlive()
true
, 그렇지 않은 경우는 false
@Deprecated public final void suspend()
resume
를 호출하기 전에 이 모니터를 잠그려고 하면(자), 데드락이 발생합니다. 일반적으로, 이러한 데드락은, 프로세스의 「동결」에 의해 밝혀집니다.
자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유
우선, 이 thread의 checkAccess
메소드가, 인수없이 불려 갑니다. 이 결과, 현재의 thread로 SecurityException
가 throw 되는 일이 있습니다.
thread는, 생존하고 있는 경우에 중단되어 재개되지 않는 처리를 먼저 진행할 수 없습니다.
SecurityException
- 현재의 thread가 이 thread를 변경할 수 없는 경우checkAccess()
@Deprecated public final void resume()
suspend()
와 함께 사용하기 위해(때문에)인 만큼 제공되고 있습니다.
자세한 것은, 이하를 참조해 주세요.
Thread.stop, Thread.suspend, Thread.resume, 및 Runtime.runFinalizersOnExit 가 추천 되지 않는 이유
우선, 이 thread의 checkAccess
메소드가, 인수없이 불려 갑니다. 이 결과, 현재의 thread로 SecurityException
가 throw 되는 일이 있습니다.
thread는, 생존하고 있지만 중단되고 있는 경우, 실행이 재개되어 처리를 먼저 진행하는 것이 허가됩니다.
SecurityException
- 현재의 thread가 이 thread를 변경할 수 없는 경우checkAccess()
,
suspend()
public final void setPriority(int newPriority)
우선, 이 thread의 checkAccess
메소드가, 인수없이 불려 갑니다. 그 결과,SecurityException
가 throw 되는 일이 있습니다.
그렇지 않은 경우, 이 thread의 우선 순위는, 지정된 newPriority
와 thread의 thread 그룹의 최고 허용 우선 순위 중의 어느 쪽인지 작은 (분)편으로 설정됩니다.
newPriority
- 이 thread를 설정하는 우선 순위
IllegalArgumentException
- 우선 순위가 MIN_PRIORITY
~ MAX_PRIORITY
의 범위외인 경우
SecurityException
- 현재의 thread가 이 thread를 변경할 수 없는 경우getPriority()
,
checkAccess()
,
getThreadGroup()
,
MAX_PRIORITY
,
MIN_PRIORITY
,
ThreadGroup.getMaxPriority()
public final int getPriority()
setPriority(int)
public final void setName(String name)
name
에 동일해지도록(듯이) 변경합니다.
우선, 이 thread의 checkAccess
메소드가, 인수없이 불려 갑니다. 그 결과,SecurityException
가 throw 되는 일이 있습니다.
name
- 이 thread의 새로운 이름
SecurityException
- 현재의 thread가 이 thread를 변경할 수 없는 경우getName()
,
checkAccess()
public final String getName()
setName(String)
public final ThreadGroup getThreadGroup()
public static int activeCount()
public static int enumerate(Thread [] tarray)
enumerate
메소드를, 배열 인수를 지정해 호출할 뿐입니다.
시큐리티 매니저가 존재하는 경우,enumerate
메소드는, thread 그룹을 인수로서 시큐리티 매니저의 checkAccess
메소드를 호출합니다. 그 결과,SecurityException
가 throw 되는 일이 있습니다.
tarray
- Thread 객체의 카피처 배열
SecurityException
- 시큐리티 매니저가 존재해, 시큐리티 매니저의 checkAccess
메소드가 이 조작을 허가하지 않는 경우ThreadGroup.enumerate(Thread[])
,
SecurityManager.checkAccess(ThreadGroup)
@Deprecated public int countStackFrames()
suspend()
에 의존합니다.
또, 이 호출의 결과는 보증되지 않습니다.
IllegalThreadStateException
- 이 thread가 중단되어 있지 않은 경우public final void join(long millis) throws InterruptedException
millis
밀리 세컨드 대기합니다.
의 타임 아웃은 영원히 대기하는 것을 의미합니다.
millis
- 밀리 세컨드 단위의 대기 시간
InterruptedException
- 어떠한 thread가 현재의 thread에 끼어들었을 경우.
이 예외가 throw 되면(자), 현재의 thread의 「인터럽트 상태」는 클리어 된다public final void join(long millis, int nanos) throws InterruptedException
millis
밀리 세컨드에 nanos
나노초를 가산한 사이, 이 thread가 종료하는 것을 대기합니다.
millis
- 밀리 세컨드 단위의 대기 시간nanos
- 대기하기 위한 0 ~ 999999 의 추가 나노초
IllegalArgumentException
- millis 의 값이 음수의 경우, 또는 nanos 의 값이 0 ~ 999999 의 범위외의 경우
InterruptedException
- 어떠한 thread가 현재의 thread에 끼어들었을 경우.
이 예외가 throw 되면(자), 현재의 thread의 「인터럽트 상태」는 클리어 된다public final void join() throws InterruptedException
InterruptedException
- 어떠한 thread가 현재의 thread에 끼어들었을 경우.
이 예외가 throw 되면(자), 현재의 thread의 「인터럽트 상태」는 클리어 된다public static void dumpStack()
Throwable.printStackTrace()
public final void setDaemon(boolean on)
이 메소드는, thread 기동전에 호출할 필요가 있습니다.
이 메소드는, 인수없이 이 thread의 checkAccess
메소드를 호출합니다. 이 결과, 현재의 thread로 SecurityException
가 throw 되는 일이 있습니다.
on
- true
의 경우, 이 thread를 demon thread로서 마크 한다
IllegalThreadStateException
- 이 thread가 액티브한 경우
SecurityException
- 현재의 thread가 이 thread를 변경할 수 없는 경우isDaemon()
,
checkAccess()
public final boolean isDaemon()
true
, 그렇지 않은 경우는 false
setDaemon(boolean)
public final void checkAccess()
시큐리티 매니저가 존재하는 경우, 이 thread가 그 인수로 지정되어 checkAccess
메소드가 불려 갑니다. 그 결과,SecurityException
가 throw 되는 일이 있습니다.
SecurityException
- 현재의 thread가 이 thread에의 액세스가 용서되지 않은 경우SecurityManager.checkAccess(Thread)
public String toString()
Object
내의 toString
public ClassLoader getContextClassLoader()
시큐리티 매니저가 존재하는 경우, 호출측의 클래스 로더가 null 는 아니고, 문맥 클래스 로더가 요구되고 있는 thread의 문맥 클래스 로더와 같지 않고, 그 문맥 클래스 로더의 상위 객체도 아닐 때는, 문맥 ClassLoader 를 취득해도 괜찮은지 어떤지를 확인하기 위해서,RuntimePermission("getClassLoader")
액세스권을 사용해, 시큐리티 매니저의 checkPermission
메소드가 불려 갑니다.
SecurityException
- 시큐리티 매니저가 존재해, 시큐리티 매니저의 checkPermission
메소드가 문맥 ClassLoader 의 취득을 허가하지 않는 경우setContextClassLoader(java.lang.ClassLoader)
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public void setContextClassLoader(ClassLoader cl)
시큐리티 매니저가 존재하는 경우, 최초로, 문맥 ClassLoader 를 설정해도 좋은지 어떤지를 조사하기 위해서(때문에) RuntimePermission("setContextClassLoader")
액세스권을 사용해 checkPermission
메소드가 불려 갑니다.
cl
- 이 Thread 의 문맥 ClassLoader
SecurityException
- 현재의 thread가 문맥 ClassLoader 를 설정할 수 없는 경우getContextClassLoader()
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public static boolean holdsLock(Object obj)
이 메소드는, 이하와 같이, 프로그램이, 현행 thread가 지정된 락을 벌써 보관 유지하고 있는 것을 나타낼 때에 사용됩니다.
assert Thread.holdsLock(obj);
obj
- 소유권의 락을 테스트하는 객체
NullPointerException
- obj 가 null 의 경우public StackTraceElement [] getStackTrace()
이것은 순서로 불려 간 가장 낡은 메소드입니다. 시큐리티 매니저가 존재해, 이 thread가 현재의 thread가 아닌 경우, 스택 트레이스를 취득해도 좋은지 어떤지를 조사하기 위해서(때문에),RuntimePermission("getStackTrace") 액세스권을 사용해 시큐리티 매니저의 checkPermission 메소드가 불려 갑니다.
가상 머신안에는, 특정의 상황하로 스택 트레이스로부터 1 개 이상의 스택 프레임을 생략 하는 것이 있습니다. 극단적인 경우, 이 thread에 관한 스택 트레이스 정보를 가지지 않는 가상 머신이, 이 메소드로부터 길이 제로의 배열을 돌려주는 것이 허가됩니다.
SecurityException
- 시큐리티 매니저가 존재해, 시큐리티 매니저의 checkPermission 메소드가 thread의 스택 트레이스의 취득을 허가하지 않는 경우SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
,
Throwable.getStackTrace()
public static Map <Thread ,StackTraceElement []> getAllStackTraces()
getStackTrace
메소드에 대해서 지정된 포맷입니다.
이 메소드가 불려 가고 있는 동안에, thread가 실행되고 있을 가능성이 있습니다. 각 thread의 스택 트레이스는, snapshot를 나타낼 뿐입니다. 각 스택 트레이스는 다른 시기에 취득할 수 있습니다. 가상 머신이 thread에 관한 스택 트레이스 정보를 가지지 않는 경우, 맵치에 길이 제로의 배열이 돌려주어집니다.
시큐리티 매니저가 존재해, 이 thread가 현재의 thread가 아닌 경우, 모든 thread의 스택 트레이스를 취득해도 좋은지 어떤지를 조사하기 위해서(때문에),RuntimePermission("getStackTrace") 액세스권과 RuntimePermission("modifyThreadGroup") 액세스권을 사용해 시큐리티 매니저의 checkPermission 메소드가 불려 갑니다.
SecurityException
- 시큐리티 매니저가 존재해, 시큐리티 매니저의 checkPermission 메소드가 thread의 스택 트레이스의 취득을 허가하지 않는 경우getStackTrace()
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
,
Throwable.getStackTrace()
public long getId()
public Thread.State getState()
public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
캐치 되지 않는 예외의 취급은 thread에 의해 우선 제어되어 다음에 thread ThreadGroup
객체에 의해, 최종적으로는 디폴트의 캐치 되지 않는 예외 핸들러에 의해 제어됩니다. thread가 명시적인 캐치 되지 않는 예외 핸들러 세트를 가지지 않는 경우, thread의 thread 그룹 (친thread 그룹을 포함한다)은,uncaughtException 메소드를 특수화 하지 않습니다. 다음에, 디폴트 핸들러의 uncaughtException 메소드가 불려 갑니다.
디폴트의 캐치 되지 않는 예외 핸들러를 설정하는 것으로, 어플리케이션에서는, 시스템으로 제공된 「디폴트」의 동작을 벌써 받아들이고 있는 thread의 캐치 되지 않는 예외를 취급하는 방법 (특정의 디바이스나 파일에의 로그인등)을 변경할 수 있습니다.
일반적으로, 디폴트의 캐치 되지 않는 예외 핸들러는, thread의 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)
캐치 되지 않는 예외 핸들러를 명시적으로 설정하는 것으로, thread는 캐치 되지 않는 예외를 완전하게 제어할 수 있습니다. 이러한 핸들러가 설정되어 있지 않은 경우는, thread의 ThreadGroup 객체가 핸들러로서 기능합니다.
eh
- thread의 캐치 되지 않는 예외 핸들러로서 사용되는 객체.
null 의 경우, thread는 명시적인 핸들러를 가지지 않는다
SecurityException
- 현재의 thread가 이 thread의 변경이 용서되지 않은 경우setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
,
ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 차의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요 : 상자 | 필드 | 생성자 | 메소드 | 상세 : 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.