recherche
MaisonJavaJavaQuestions d'entretienIntervieweur : Pourriez-vous s'il vous plaît me dire les différences entre sleep(), wait(), join() et rendement()

Intervieweur : Pourriez-vous s'il vous plaît me dire les différences entre sleep(), wait(), join() et rendement()

Introduisons 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的执行资格和执行权释放出去,不再运行此线程,当定时事件结束再取回cpu资源,参与cpu的调度,获取到cpu资源后就可以继续运行了,而如果sleep时该线程有锁,那么sleep不会释放这个锁,而是把锁带着进入了冻结状态,也就是说其它需要这个锁的线程根本不可能获取到这个锁。也就是说无法执行程序,如果在睡眠期间其它线程调用了这个线程的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("线程执行完成");
    }

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!

Déclaration
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Navigateur d'examen sécurisé

Navigateur d'examen sécurisé

Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft