


Intervieweur?: Pourriez-vous s'il vous pla?t me dire les différences entre sleep(), wait(), join() et rendement()
Mar 01, 2021 am 10:18 AMIntroduisons d'abord les concepts de pool de verrouillage et de pool d'attente.
Examinons d'abord le concept de pool de verrous
Tous les threads qui doivent rivaliser pour les verrous de synchronisation seront placés dans le pool de verrous. Par exemple, si le verrou de l'objet actuel a été. obtenu par l'un des threads, d'autres threads devront attendre dans ce pool de verrouillage, lorsque le thread précédent libère le verrou de synchronisation, les threads du pool de verrouillage se disputent le verrou de synchronisation. Lorsqu'un thread l'obtient, il entrera dans le prêt. file d'attente pour attendre l'allocation des ressources CPU.
Jetons un coup d'?il au concept de pool d'attente
Lorsque nous appelons la méthode wait(), le thread sera placé dans le pool d'attente, et les threads en attente dans le pool ne le seront pas rivaliser pour les verrous de synchronisation. Ce n'est qu'après avoir appelé notify() ou notifyAll() que les threads du pool d'attente commenceront à rivaliser pour le verrou. notify() sélectionne au hasard un thread dans le pool d'attente et le place dans le pool de verrouillage, tandis que notifyAll() place tous les threads. dans le pool d'attente Mettez-le dans le pool de verrouillage.
sleep est une méthode locale statique de la classe Thread, et wait est une méthode locale de Object.
La méthode sleep ne libérera pas le verrou, mais l'attente le libérera et l'ajoutera à la file d'attente.
sleep就是把cpu的執(zhí)行資格和執(zhí)行權(quán)釋放出去,不再運行此線程,當(dāng)定時事件結(jié)束再取回cpu資源,參與cpu的調(diào)度,獲取到cpu資源后就可以繼續(xù)運行了,而如果sleep時該線程有鎖,那么sleep不會釋放這個鎖,而是把鎖帶著進(jìn)入了凍結(jié)狀態(tài),也就是說其它需要這個鎖的線程根本不可能獲取到這個鎖。也就是說無法執(zhí)行程序,如果在睡眠期間其它線程調(diào)用了這個線程的interrupt方法,那么這個線程也會拋出interruptexception異常返回,這點和wait是一樣的。
La méthode sleep ne dépend pas du synchroniseur synchronisé, mais wait nécessite le mot-clé synchronisé.
le sommeil n'a pas besoin d'être réveillé (les sorties se bloquent après avoir dormi), mais l'attente le fait (il n'a pas besoin d'être interrompu par d'autres à une heure précise).
sleep est généralement utilisé pour mettre en veille le thread en cours, ou pour interroger et suspendre les opérations, tandis que wait est principalement utilisé pour la communication entre plusieurs threads.
sleep abandonnera le temps d'exécution du processeur et forcera le changement de contexte, mais wait ne le fera pas nécessairement. Après l'attente, il peut encore y avoir une chance de concourir à nouveau pour le verrou et de poursuivre l'exécution. .
yield() Après exécution, le thread entre directement dans l'état prêt et libère immédiatement le droit d'exécution du processeur, mais la qualification d'exécution du processeur est toujours conservée, c'est donc possible que le processeur effectuera la planification des threads la prochaine fois. Ce thread sera autorisé à obtenir les droits d'exécution et à poursuivre l'exécution.
(Apprentissage du partage vidéo?: tutoriel vidéo Java)
Après l'exécution de join(), le fil entre dans l'état de blocage, par exemple en appelant join() du fil A dans le thread B, puis le thread B entrera dans la file d'attente de blocage et demandera au thread A de terminer ou d'interrompre le thread.
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("線程執(zhí)行完成"); }
Lien original?: https://blog.csdn.net/lxn1023143182/article/details/114134498
Recommandations associées?: questions et réponses d'entretien Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le choix d'une image Docker pour Node peut sembler trivial, mais la taille et les vulnérabilités potentielles de l'image peuvent avoir un impact significatif sur votre processus CI/CD et votre sécurité. Alors, comment choisir la meilleure image Docker Node.js ?

Le cross-domaine est un scénario souvent rencontré en développement, et c'est également une question souvent abordée lors des entretiens. La ma?trise des solutions interdomaines communes et des principes qui les sous-tendent peut non seulement améliorer notre efficacité de développement, mais également mieux performer lors des entretiens.

Le modèle JS singleton est un modèle de conception couramment utilisé qui garantit qu'une classe n'a qu'une seule instance. Ce mode est principalement utilisé pour gérer les variables globales afin d'éviter les conflits de noms et les chargements répétés. Il peut également réduire l'utilisation de la mémoire et améliorer la maintenabilité et l'évolutivité du code.

Le framework Go est un ensemble de composants qui étendent les bibliothèques intégrées de Go, fournissant des fonctionnalités prédéfinies (telles que le développement Web et les opérations de base de données). Les frameworks Go populaires incluent Gin (développement Web), GORM (opérations de base de données) et RESTful (gestion des API). Le middleware est un modèle d'intercepteur dans la cha?ne de traitement des requêtes HTTP et est utilisé pour ajouter des fonctionnalités telles que l'authentification ou la journalisation des requêtes sans modifier le gestionnaire. La gestion des sessions maintient l'état de la session en stockant les données utilisateur. Vous pouvez utiliser gorilla/sessions pour gérer les sessions.

Qu’est-ce que JPA ? En quoi est-ce différent de JDBC?? JPA (JavaPersistence API) est une interface standard pour le mappage objet-relationnel (ORM), qui permet aux développeurs Java d'utiliser des objets Java familiers pour faire fonctionner des bases de données sans écrire de requêtes SQL directement sur la base de données. JDBC (JavaDatabaseConnectivity) est l'API standard de Java pour la connexion aux bases de données. Elle oblige les développeurs à utiliser des instructions SQL pour faire fonctionner la base de données. JPA encapsule JDBC, fournit une API plus pratique et de niveau supérieur pour le mappage objet-relationnel et simplifie les opérations d'accès aux données. Dans JPA, qu’est-ce qu’une entité ? entité

Comment JavaScript détermine-t-il le type de données?? Cet article partagera avec vous 8 fa?ons d'utiliser JS pour déterminer le type de données, ce qui peut faciliter efficacement le travail et les entretiens. L'intervieweur a légèrement souri après l'avoir lu.

Le module url et le module querystring sont deux modules de traitement d'URL très importants. Il est souvent utilisé lors du développement de serveurs de n?uds.

Cet article compile et partage 100 questions d'entretien PHP courantes (avec réponses partagées) pour vous aider à trier les connaissances de base et à améliorer votre réserve de connaissances PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
