면접관: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Node용 Docker 이미지를 선택하는 것은 사소한 문제처럼 보일 수 있지만 이미지의 크기와 잠재적인 취약점은 CI/CD 프로세스와 보안에 상당한 영향을 미칠 수 있습니다. 그렇다면 최고의 Node.js Docker 이미지를 어떻게 선택합니까?

크로스 도메인은 개발 과정에서 자주 접하는 시나리오이며, 인터뷰에서도 자주 거론되는 문제이기도 합니다. 일반적인 크로스 도메인 솔루션과 그 뒤에 숨은 원칙을 익히면 개발 효율성이 향상될 뿐만 아니라 인터뷰에서도 더 나은 성과를 낼 수 있습니다.

Go 프레임워크는 Go의 내장 라이브러리를 확장하여 사전 구축된 기능(예: 웹 개발 및 데이터베이스 운영)을 제공하는 구성 요소 집합입니다. 널리 사용되는 Go 프레임워크에는 Gin(웹 개발), GORM(데이터베이스 운영) 및 RESTful(API 관리)이 포함됩니다. 미들웨어는 HTTP 요청 처리 체인의 인터셉터 패턴으로, 핸들러를 수정하지 않고 인증이나 요청 로깅 등의 기능을 추가하는 데 사용됩니다. 세션 관리는 사용자 데이터를 저장하여 세션 상태를 유지합니다. gorilla/sessions를 사용하여 세션을 관리할 수 있습니다.

JS 싱글톤 패턴은 클래스에 인스턴스가 하나만 있도록 보장하는 일반적으로 사용되는 디자인 패턴입니다. 이 모드는 이름 충돌과 반복적인 로딩을 방지하기 위해 전역 변수를 관리하는 데 주로 사용됩니다. 또한 메모리 사용량을 줄이고 코드 유지 관리성과 확장성을 향상시킬 수 있습니다.

JPA 란 무엇입니까? JDBC와 어떻게 다른가요? JPA(JavaPersistence API)는 ORM(객체 관계형 매핑)을 위한 표준 인터페이스로, 이를 통해 Java 개발자는 데이터베이스에 대해 직접 SQL 쿼리를 작성하지 않고도 친숙한 Java 객체를 사용하여 데이터베이스를 작동할 수 있습니다. JDBC(JavaDatabaseConnectivity)는 데이터베이스에 연결하기 위한 Java의 표준 API로, 개발자가 데이터베이스를 작동하려면 SQL 문을 사용해야 합니다. JPA는 JDBC를 캡슐화하고 객체 관계형 매핑을 위한 보다 편리하고 높은 수준의 API를 제공하며 데이터 액세스 작업을 단순화합니다. JPA에서 엔터티란 무엇입니까? 실재

JavaScript는 데이터 유형을 어떻게 결정합니까? 이 기사에서는 JS를 사용하여 업무와 면접에 효과적으로 도움이 될 수 있는 데이터 유형을 결정하는 8가지 방법을 공유합니다. 면접관은 이 기사를 읽은 후 살짝 미소를 지었습니다.

url 모듈과 querystring 모듈은 두 가지 매우 중요한 URL 처리 모듈입니다. 노드 서버를 개발할 때 자주 사용됩니다.

번역가 | 기획 작성자: Zhu Xianzhong | Xu Jiecheng 개발자가 신뢰하는 다른 소프트웨어 개발 도구와 달리 AI 도구에는 교육, 구성, 호스팅 및 사용 측면에서 몇 가지 고유한 위험이 있습니다. 2022년 말 ChatGPT가 출시된 이후 인터넷에는 이를 지지하는 주장과 거의 같은 비율로 의심하는 주장이 가득했습니다. 당신이 좋든 싫든 AI는 개발 조직에 침투하고 있습니다. AI 제품을 개발하거나 AI 도구를 활용하여 코드를 작성할 계획이 없더라도 소스 코드를 구축, 테스트 및 실행하는 데 사용되는 도구 및 플랫폼에 여전히 통합될 수 있습니다. AI 도구는 작업 자동화로 인한 생산성 향상에 영향을 미칠 수 있는 몇 가지 고유한 위험을 제시합니다. 이러한 위험은 주로
