JAVA에서 스레드를 종료하는 방법 소개

2226 단어 JAVA라인
자바의 다중 루틴 프로그래밍에서, 자바.lang.Thread 형식은 start (), stop (), stop (Throwable) and suspend (), destroy () and resume () 열을 포함합니다.이러한 방법을 통해 우리는 라인에 대해 편리한 조작을 할 수 있지만, 이러한 방법 중start () 방법만 보류되었다.
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!

좋은 웹페이지 즐겨찾기