Java 동시 프로그래밍 예 (3): 스레드 인터럽트

모든 스레드가 완료될 때까지 전체 프로그램이 종료되는 다중 스레드의 Java 프로그램입니다.(주의해야 할 것은 모든 비백그라운드 라인 (non-daemonthread) 이 실행됩니다.만약 한 라인이 시스템을 실행했다면.exit () 방법, 프로그램도 종료됩니다.)때때로, 프로그램을 종료하고 싶거나, 실행 중인 작업을 취소하고 싶을 때, 프로그램의 실행을 중단하고 싶을 때가 있다.
Java는 우리가 실행하고자 하는 라인을 현저하게 중단할 수 있는 인터럽트 메커니즘을 제공합니다.중단 메커니즘의 특징 중 하나는 우리가 라인이 중단되었는지 확인하고 중단 요청에 응답할지 여부를 결정할 수 있다는 것이다.라인도 중단 요청을 무시하고 계속 실행할 수 있습니다.
이 절에서 우리가 개발한 예시 프로그램은 5초 후에 중단 메커니즘을 이용하여 이 라인을 강제로 중단할 것이다.
그 사실을 알다
다음 절차에 따라 예시 절차를 완성하세요.
1. PrimeGenerator라는 클래스를 만들고 Thread 클래스를 계승합니다.코드는 다음과 같습니다.

public class PrimeGenerator extends Thread {
2. run() 방법을 다시 쓰고 방법에 무한 순환을 추가합니다. 순환 내에서 계산을 통해 1부터 시작하는 연속 정수가 소수인지 확인합니다.그렇다면 콘솔에 인쇄합니다.코드는 다음과 같습니다.

@Override
public void run() {
    long number = 1L;
    while (true) {
        if (isPrime(number)) {
            System.out.printf("Number %d \tis Prime.", number);
        }
3. 숫자를 처리한 후에 isInterrupted () 방법을 호출하여 라인이 중단되었는지 확인합니다.이 방법이true로 되돌아오면 컨트롤러에 한 마디를 인쇄하고 라인 실행을 중단합니다.코드는 다음과 같습니다.

        if (isInterrupted()) {
            System.out.println("The Prime Generator has been Interrupted");
            return;
        }

        number++;
    }
}

4. isPrime () 방법을 실현합니다. 이 방법은 매개 변수가 소수인지 아닌지를 판단하는 데 사용되며,true를 되돌려줍니다. 그렇지 않으면false를 되돌려줍니다.코드는 다음과 같습니다.

/**
 *
 *
 * @param number
 * @return
 */
private boolean isPrime(long number) {
    if (number <= 2) {
        return true;
    }

    for (int i = 2; i < number; i++) {
        if ((number % i) == 0) {
            return false;
        }
    }

    return true;
}

5. 현재 예시 프로그램의 메인 클래스, 메인 클래스를 실현하고main () 방법을 실현합니다.코드는 다음과 같습니다.

public class Main {
    public static void main(String[] args) {
6. PrimeGenerator 객체를 만들고 스레드를 시작합니다.코드는 다음과 같습니다.

Thread task = new PrimeGenerator();
task.start();
7. 5초를 기다린 후 이 라인을 중단합니다.코드는 다음과 같습니다.

try {
    TimeUnit.SECONDS.sleep(5L);
} catch (InterruptedException e) {
    e.printStackTrace();
}

task.interrupt();

8. 이 예시를 실행하고 결과를 보십시오.
그 까닭을 알다
다음은 예시 프로그램이 실행하는 인쇄 부분입니다.인쇄된 문자에서 PrimeGenerator 스레드가 출력 정보를 어떻게 인쇄하는지, 스레드가 중단되었을 때 실행을 중단하는 방법을 알 수 있습니다.

Number 43063    is Prime.
Number 43067    is Prime.
Number 43093    is Prime.
Number 43103    is Prime.
Number 43117    is Prime.
The Prime Generator has been Interrupted
Thread는 스레드가 중단되었는지 여부를 나타내는 부울 모양의 익숙함이 있습니다.인터럽트 () 방법을 호출할 때true로 설정합니다.isInterrupted () 메서드는 이 속성의 현재 값을 되돌려줍니다.
영원히 끝이 없다
Thread는 현재 실행 중인 스레드가 중단되었는지 확인할 수 있는 정적 방법인interrupted () 가 있습니다.

isInterrupted() interrupted() 。 ; false。interrupted() ; isInterrupted() 。
앞에서 말한 바와 같이, 라인은 중단 요청을 무시하고 계속 실행할 수 있습니다.그러나 이것은 우리가 원하는 결과가 아니다.
나래주의
본고는 《Java7 Concurrency Cookbook》(D 오이고에서 《Java7 병발 예시집》으로 번역)에서 번역한 것으로 학습 자료로만 사용된다.권한이 없으면 어떠한 상업 행위에도 사용할 수 없다.
소소하다
예시 프로그램이 사용하는 모든 코드의 전체 버전입니다.
PrimeGenerator 클래스의 전체 코드

package com.diguage.books.concurrencycookbook.chapter1.recipe3;

/**
 * Date: 2013-09-18
 * Time: 11:53
 */
public class PrimeGenerator extends Thread {

    @Override
    public void run() {
        long number = 1L;
        while (true) {
            if (isPrime(number)) {
                System.out.printf("Number %d \tis Prime.
", number);
            }

            if (isInterrupted()) {
                System.out.println("The Prime Generator has been Interrupted");
                return;
            }

            number++;
        }
    }

    /**
     *
     *
     * @param number
     * @return
     */
    private boolean isPrime(long number) {
        if (number <= 2) {
            return true;
        }

        for (int i = 2; i < number; i++) {
            if ((number % i) == 0) {
                return false;
            }
        }

        return true;
    }
}

Main 클래스의 전체 코드

package com.diguage.books.concurrencycookbook.chapter1.recipe3;

import java.util.concurrent.TimeUnit;

/**
 * Date: 2013-09-18
 * Time: 12:33
 */
public class Main {
    public static void main(String[] args) {
        Thread task = new PrimeGenerator();
        task.start();

        try {
            TimeUnit.SECONDS.sleep(5L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        task.interrupt();
    }
}

좋은 웹페이지 즐겨찾기