>  기사  >  Java  >  Java 스레드 중단과 차단의 차이점은 무엇입니까? Java 스레드 중단 및 차단 비교

Java 스레드 중단과 차단의 차이점은 무엇입니까? Java 스레드 중단 및 차단 비교

不言
不言원래의
2018-09-15 16:51:062652검색

이 기사에서는 Java 스레드 중단과 차단의 차이점이 무엇인지 설명합니다. Java 스레드 중단과 차단의 비교에는 특정 참조 값이 있습니다. 도움이 필요한 친구가 참고할 수 있기를 바랍니다.

저를 포함한 많은 Java 개발자, 특히 소프트웨어 산업에 막 입문한 초보자는 Java에서 스레드 인터럽트를 설정하면 스레드가 중지되어 앞으로 실행되지 않는다는 의미라고 생각합니다.

Thread.currentThread().interrupt ()

실제로는 그렇지 않습니다. 스레드 중단은 단지 상태일 뿐이며 true는 중단되었음을 의미하고 false는 중단되지 않음을 의미합니다

//스레드 중단 상태를 가져오고 중단되면 true를 반환하고 그렇지 않으면 false를 반환합니다
Thread. currentThread().isInterrupted()
스레드 인터럽트 설정은 스레드의 지속적인 실행에 영향을 미치지 않습니다. 그러나 스레드가 인터럽트를 설정한 후 스레드에서 wait, jion 및 sleep 메소드 중 하나가 호출되고 InterruptedException이 발생합니다. 즉시 발생하고 인터럽트 플래그가 지워지고 false로 재설정됩니다.

클래스 Thread2는 Runnable을 구현합니다.{

    @Override
    public void run() {
        try {
            System.out.println();
            System.out.println(hread.currentThread().isInterrupted());//输出false
            Thread.currentThread().interrupt();//当前线程中断
            System.out.println("Thread.currentThread().isInterrupted());//输出true
            Thread.sleep(3000);//中断后执行sleep会抛出异常
        } catch (InterruptedException e) {
            e.printStackTrace();
            System.out.println("Thread.currentThread().isInterrupted());//输出false
        }
       
    }
}

스레드를 실제로 중지하고 앞으로 실행하지 않게 만드는 방법:
실제로 스레드를 중지(차단)하기 위해 Java는 일반적으로 사용되는 메서드인 LockSupport라는 상대적으로 낮은 수준의 동시성 도구 클래스를 제공합니다. 이 클래스에는 두 가지가 있습니다. 1

park(객체 차단기)는 지정된 스레드를 차단하는 것을 의미하고 매개변수 차단기는 현재 스레드 객체입니다. 2 unpark(스레드 스레드)는 지정된 스레드를 깨우고 매개변수 스레드는 스레드 객체를 지정합니다
예제 :

 public void test_LockSupport(){
      Thread thread=new Thread(new Thread_park());
      thread.start();//阻塞当前线程
      Thread thread2=new Thread(new Thread_unpark(thread));
      thread2.start();//唤醒被阻塞的线程
  }

  class Thread_park implements  Runnable{
    @Override
    public void run() {
        System.out.println("Thread_park开始");
        LockSupport.park(this);//阻塞当前线程
        System.out.println("Thread_park结束");
     }
  }

 class Thread_unpark implements  Runnable{
    private Thread thread;

    public Thread_unpark(Thread thread) {
        this.thread = thread;
    }

    @Override
    public void run() {
        System.out.println("Thread_unpark开始");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LockSupport.unpark(thread);//唤醒被阻塞的线程
        System.out.println("Thread_unpark结束");
    }
}

관련 권장 사항:

자세한 설명 Java 멀티 스레드 프로그래밍에서 LockSupport 클래스의 스레드 차단 사용

Java의 멀티 스레드 차단 및 깨우기 샘플 코드

위 내용은 Java 스레드 중단과 차단의 차이점은 무엇입니까? Java 스레드 중단 및 차단 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.