>Java >java지도 시간 >Java 스레드 중단 중단 및 중지

Java 스레드 중단 중단 및 중지

王林
王林앞으로
2019-11-26 14:53:402743검색

Java 스레드 중단 중단 및 중지

interrupt 메서드

스레드의 sleep 메서드나 Join 메서드를 호출할 때 특정 스레드를 대기 상태로 만들 수 있습니다. 현재 스레드의 Interrupt() 메서드를 호출하면 차단 상태가 중단될 수 있습니다. 인터럽트 방법은 스레드가 끝나도록 하지 않습니다.

public void interrupt();// 中断线程的阻塞状态

이 메서드는 InterruptedExceptionException을 발생시킵니다.

Java 관련 학습 영상 추천 : java 강좌

케이스 : 인터럽트 슬립의 대기 상태를 보여줍니다

스레드 클래스 :

 package com.pbteach.thread;
 public class MyThread extends Thread {
    
        @Override
        public void run() {
    
            for(int x = 0 ; x < 100 ; x++) {
                System.out.println(Thread.currentThread().getName() + "----" + x );
                if(x == 10) {
                    try {
                        TimeUnit.SECONDS.sleep(10);     // 线程休眠以后,该线程就处于阻塞状态
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

테스트 클래스 :

package com.pbteach.thread;
public class ThreadDemo {

    public static void main(String[] args) {

        // 创建MyThread线程对象
        MyThread t1 = new MyThread();
        t1.setName("pbteach-01");

        // 启动线程
        t1.start();

        try {
            // 主线程休眠2秒
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 中断t1线程的休眠
        t1.interrupt();

    }

}

출력 결과 :

...
pbteach-01----10
java.lang.InterruptedException: sleep interrupted
	at java.base/java.lang.Thread.sleep(Native Method)
	at java.base/java.lang.Thread.sleep(Thread.java:339)
	at java.base/java.util.concurrent.TimeUnit.sleep(TimeUnit.java:446)
	at com.pbteach.javase.thread.api.demo14.MyThread.run(MyThread.java:14)
pbteach-01----11
...

콘솔을 통한 출력 결과, 중단된 메서드는 현재 스레드를 종료하지 않고 스레드의 차단 상태를 중단한 후 스레드 pbteach-01이 계속 실행되는 것을 볼 수 있습니다.

stop 메서드

스레드의 실행을 종료하려면 스레드의 stop 메서드를 호출하세요.

public final void stop()  // 终止线程的执行

Thread 클래스

package com.pbteach.thread;
    public class MyThread extends Thread {
    
        @Override
        public void run() {
    
            for(int x = 0 ; x < 100 ; x++) {
                System.out.println(Thread.currentThread().getName() + "----" + x );
                if(x == 10) {
                    try {
                        TimeUnit.SECONDS.sleep(10);     // 线程休眠以后,该线程就处于阻塞状态
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

테스트 클래스:

package com.pbteach.thread;
    public class ThreadDemo1 {
    
        public static void main(String[] args) {
    
            // 创建MyThread线程对象
            MyThread t1 = new MyThread();
            t1.setName("pbteach-01");
    
            // 启动线程
            t1.start();
    
            try {
                // 主线程休眠2秒
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            // 终止线程t1的执行
            t1.stop();
    
        }
    
    }

출력 결과:

...
pbteach-01----9
pbteach-01----10

콘솔에 비정상적인 출력이 없고 프로그램이 종료되며 "pbteach-01" 스레드가 계속 실행되지 않습니다.

추천 관련 기사 및 튜토리얼: Java 프로그래밍 소개

위 내용은 Java 스레드 중단 중단 및 중지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제