Java 스레드를 닫는 3가지 방법

3158 단어 Java라인닫다
Java 스레드가 닫히면
1. 상태 위치 사용, 이것은 간단, 더 이상 말할 필요가 없다:

public class Task extends Thread {

private volatile boolean flag= true;

public void stopTask() {

flag = false;

}

@Override

public void run() {

while(flag){

/* do your no-block task */

}

}

}

2.어떤 사건이 발생하기를 기다리다가 막히면 또 무슨 일이 일어날까요?물론 스레드가 막히면 공유 변수를 검사할 수도 없고 멈출 수도 없다.이것은 많은 상황에서 발생할 수 있다. 예를 들어 Object를 호출하는 것이다.wait()、Thread.sleep 등, 여기는 조금만 들어요.그들은 모두 영원히 라인을 막을 수 있다.시간 초과가 발생하더라도 시간 초과가 끝나기 전에 계속 기다리는 것은 불가능하고 부적절하기 때문에 어떤 메커니즘을 사용하여 라인이 더 일찍 막힌 상태에서 물러나도록 해야 한다.이럴 때 너는 사용할 수 있다

Thread.interrupt();

public class BlockTask extends Thread {

@Override

public void run() {

try {

while (!Thread.interrupted()) {

/* do your block task*/

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

그러나 위의 코드는 좀 부적절할 수도 있고, 예를 들면 문제를 더욱 분명하게 말할 수도 있다.너는 이 코드 세그먼트가 막힐 수 있다는 것을 어떻게 알았니?interrupt () 함수는 도대체 무슨 뜻입니까?우선,interrupted () 방법은 Interrupted Exception에서 벗어나는 이상한 막힘만 해결할 수 있다는 것을 설명한다.인터페이스 () 는 차단 라인을 닫는 것이 아니라 차단을 해제하는 것입니다.그럼 여기서 폐쇄 라인이 막힌 예를 들겠습니다

public class BlockTask extends Thread {

@Override

public void run() {

try {

sleep(10000);

} catch (InterruptedException e) {

System.out.println("if yout use interrupt you will see me");

}


}

public static void main(String[] args)throws Exception {

// TODO Auto-generated method stub

BlockTask task = new BlockTask();

task.start();

Thread.sleep(1000);

task.interrupt();


}

}

3.위에서 말했듯이interrupt () 는 Interrupted Exception의 막힌 라인만 해결할 수 있습니다. 그러면 다른 io 막힌 부분을 만나면 어떻게 처리합니까?이때 자바는 상응하는 차단 방법을 제공할 것이다.예를 들어 서버가 요청 (request) 을 기다려야 하거나, 네트워크 응용 프로그램이 원격 호스트의 응답을 기다려야 할 수도 있습니다. 이때 플러그인close () 방법을 사용할 수 있습니다

public class SocketTask extends Thread {

private volatile ServerSocket server;


public void stopTask(){

try {

if(server!=null){

server.close();

System.out.println("close task successed");

}

} catch (IOException e) {

System.out.println("close task failded");

}

}

@Override

public void run() {

try {

server = new ServerSocket(3333);

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws InterruptedException {


SocketTask task = new SocketTask();

task.start();

Thread.sleep(1000);

task.stopTask();

}

}

좋은 웹페이지 즐겨찾기