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

选择一个Node的Docker镜像看起来像是一件小事,但是镜像的大小和潜在漏洞可能会对你的CI/CD流程和安全造成重大的影响。那我们如何选择一个最好Node.js Docker镜像呢?

跨域是开发中经常会遇到的一个场景,也是面试中经常会讨论的一个问题。掌握常见的跨域解决方案及其背后的原理,不仅可以提高我们的开发效率,还能在面试中表现的更加

什么是JPA?它与JDBC有什么区别?JPA(JavaPersistenceapi)是一个用于对象关系映射(ORM)的标准接口,它允许Java开发者使用熟悉的Java对象来操作数据库,而无需编写直接针对数据库的sql查询。而JDBC(JavaDatabaseConnectivity)是Java用于连接数据库的标准API,它需要开发者使用SQL语句来操作数据库。JPA将JDBC封装起来,为对象-关系映射提供了更方便、更高级别的API,简化了数据访问操作。在JPA中,什么是实体(Entity)?实体

JS 单例模式是一种常用的设计模式,它可以保证一个类只有一个实例。这种模式主要用于管理全局变量,避免命名冲突和重复加载,同时也可以减少内存占用,提高代码的可维护性和可扩展性。

Go框架是一组扩展Go内置库的组件,提供预制功能(例如Web开发和数据库操作)。流行的Go框架包括Gin(Web开发)、GORM(数据库操作)和RESTful(API管理)。中间件是HTTP请求处理链中的拦截器模式,用于在不修改处理程序的情况下添加身份验证或请求日志记录等功能。Session管理通过存储用户数据来保持会话状态,可以使用gorilla/sessions管理session。

JavaScript怎么判断数据类型?本篇文章给大家分享JS 判断数据类型的 8 种方式,有效帮助工作和面试,面试官看了微微一笑。

url模块和querystring模块是非常重要的两个URL处理模块。在做node服务端的开发时会经常用到。

本篇文章整理了20+Vue面试题分享给大家,同时附上答案解析。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

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

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
