JAVA에서 스레드를 종료하는 방법 소개
Sun의 한 글'Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?'에서 이러한 방법을 버리는 원인을 상세하게 설명하였다.
만약 정말로 하나의 라인을 종료해야 한다면 다음과 같은 몇 가지 방법을 사용할 수 있다. 1. 라인의run () 방법을 실행하면 라인은 자연히 끝난다.(이런 방법이 가장 좋다)
2. 윤문과 공유 표지 위치의 방법을 통해 라인을 끝냅니다. 예를 들어while (flag) {}, flag의 초기 값을 진짜로 설정하고, 끝날 때 flag의 값을false로 설정합니다.(이런 방법도 좋지 않다. 왜냐하면 while (flag) {} 방법이 막히면 flag가 효력을 잃기 때문이다.)
public class SomeThread implements Runnable {
private volatile boolean stop = false;
public void terminate() {
stop = ture;
}
public void run() {
while(stop) {
// ... some statements
}
}
}
만약 스레드가 sleep () 또는wait () 를 실행하기 때문에 Not Runnable 상태에 들어간다면,wait () 가 표지 위치를 사용하면 방법이 없습니다.
public final void wait (long timeout)throws Interrupted Exception 이 방법은 현재 라인 (T라고 함) 을 대상의 대기 집중에 놓고 이 대상의 모든 동기화 요구를 포기합니다.현재 스레드가 대기 상태로 변경됨
wait()의 표준 사용 방법
synchronized(obj){
while (<충족되지 않음>) {
obj.wait();
}
조건 충족 처리 과정
}
멈추고 싶으면 세 번째
3 interrupt () 를 사용하면 프로그램은 InterruptedException 예외를 잃어버리기 때문에 실행 서열을 run () 방법을 벗어납니다.
예:
public class SomeThread {
public static void main(String[] args)
{
Thread thread=new Thread(new Runnable(){
public void run() {
while (!Thread.interrupted()) {
//
try {
System.out.println("go to sleep");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("i am interrupted!");
}
});
thread.start();
thread.interrupt();
}
}
실행 결과:go to sleep
i am interrupted!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.