>  기사  >  Java  >  면접관: sleep(), wait(), Join() 및 Yield()의 차이점을 알려주시겠어요?

면접관: sleep(), wait(), Join() 및 Yield()의 차이점을 알려주시겠어요?

王林
王林앞으로
2021-03-01 10:18:213605검색

면접관: sleep(), wait(), Join() 및 Yield()의 차이점을 알려주시겠어요?

먼저 Lock Pool과 Waiting Pool의 개념을 소개하겠습니다.

먼저 잠금 풀의 개념을 살펴보겠습니다

동기화 잠금을 놓고 경쟁해야 하는 모든 스레드는 잠금 풀에 배치됩니다. 스레드는 이 잠금 풀에서 대기해야 합니다. 현재 아래 스레드가 동기화 잠금을 해제한 후 잠금 풀의 스레드는 동기화 잠금을 얻기 위해 경쟁합니다. 스레드는 준비 대기열에 들어가 CPU 리소스 할당을 기다립니다.

대기 풀의 개념을 살펴보겠습니다

wait() 메서드를 호출하면 스레드는 대기 풀에 배치되고 풀에서 대기 중인 스레드는 동기화 잠금을 위해 경쟁하지 않습니다. inform() 또는 informAll()을 호출한 후에만 대기 풀의 스레드가 잠금 경쟁을 시작합니다. 통지()는 대기 풀에서 스레드를 무작위로 선택하여 잠금 풀에 넣는 반면, informAll()은 모든 스레드를 넣습니다. 대기 풀에 잠금 풀에 넣습니다.

  • sleep은 Thread 클래스의 정적 로컬 메서드이고 wait는 Object의 로컬 메서드입니다.

  • sleep 메서드는 잠금을 해제하지 않지만 대기는 잠금을 해제하고 대기 대기열에 추가합니다.

sleep就是把cpu的执行资格和执行权释放出去,不再运行此线程,当定时事件结束再取回cpu资源,参与cpu的调度,获取到cpu资源后就可以继续运行了,而如果sleep时该线程有锁,那么sleep不会释放这个锁,而是把锁带着进入了冻结状态,也就是说其它需要这个锁的线程根本不可能获取到这个锁。也就是说无法执行程序,如果在睡眠期间其它线程调用了这个线程的interrupt方法,那么这个线程也会抛出interruptexception异常返回,这点和wait是一样的。
  • sleep 방식은 동기화된 동기화에 의존하지 않지만, wait는 동기화된 키워드에 의존해야 합니다.

  • 수면은 깨울 필요가 없지만(잠든 후 차단 종료) 기다립니다(지정된 시간에 다른 사람에 의해 방해받을 필요는 없음).

  • sleep은 일반적으로 현재 스레드를 잠자기하거나 작업을 폴링하고 일시 중지하는 데 사용되는 반면 wait는 주로 여러 스레드 간의 통신에 사용됩니다.

  • sleep은 CPU 실행 시간을 포기하고 컨텍스트 전환을 강제하지만 대기가 반드시 그렇게 되는 것은 아닙니다. 대기 후에도 잠금을 위해 다시 경쟁하고 실행을 계속할 기회가 있을 수 있습니다.

yield() 실행 후 스레드는 바로 준비 상태에 들어가 CPU의 실행 권한을 즉시 해제하지만 여전히 CPU의 실행 자격을 유지하므로 다음 번에 CPU가 스레드 스케줄링을 수행할 가능성이 있습니다. , 이 스레드는 실행을 계속합니다.

(학습 영상 공유: java 영상 튜토리얼)

join()이 실행된 후 스레드는 차단 상태에 들어갑니다. 예를 들어 스레드 A의 Join()이 스레드 B에서 호출되면 스레드 B는 차단 상태에 들어갑니다. 큐 및 가이드 스레드 A. 스레드를 종료하거나 중단합니다.

public static void main(String[] args) throws InterruptedException {
        Thread t1=new Thread(()->{
            try {
                Thread.sleep(4000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("休眠sleep线程");
        });
        t1.start();
        t1.join();
        System.out.println("线程执行完成");
    }

원본링크: https://blog.csdn.net/lxn1023143182/article/details/114134498

관련 추천: java 면접 질문과 답변

위 내용은 면접관: sleep(), wait(), Join() 및 Yield()의 차이점을 알려주시겠어요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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