Maison > Java > javaDidacticiel > Quelles sont les méthodes d'acquisition de verrous en Java ?

Quelles sont les méthodes d'acquisition de verrous en Java ?

王林
Libérer: 2023-05-19 13:13:06
avant
2040 Les gens l'ont consulté

1. Les méthodes d'acquisition

lock(), tryLock(), tryLock(long time, TimeUnit unit) et lockInterruptably() sont toutes utilisées pour acquérir des verrous.

(1) La méthode lock() est la méthode la plus couramment utilisée, qui est utilisée pour obtenir le verrou. Si le verrou a été acquis par un autre thread, attendez.

(2) La méthode tryLock() a une valeur de retour, ce qui signifie qu'elle est utilisée pour essayer d'acquérir le verrou Si l'acquisition réussit, elle renvoie vrai si l'acquisition échoue (c'est-à-dire que le verrou a réussi. été acquise par un autre thread), elle renvoie false En d’autres termes, cette méthode retournera immédiatement quoi qu’il arrive. Vous n'attendrez pas là-bas si vous ne parvenez pas à obtenir la serrure.

(3) La méthode tryLock(long time, TimeUnit unit) est similaire à la méthode tryLock(), mais la seule différence est que cette méthode attendra un certain temps lorsqu'elle ne pourra pas obtenir le verrou si c'est le cas. toujours verrouillé dans le délai imparti. Si le verrou ne peut pas être obtenu, false est renvoyé. Renvoie vrai si le verrou a été obtenu initialement ou pendant la période d'attente.

(4) La méthode lockInterruptably() est spéciale. Lors de l'acquisition d'un verrou via cette méthode, si le thread attend d'acquérir le verrou, le thread peut répondre à l'interruption, c'est-à-dire à l'état d'attente du thread d'interruption. En d'autres termes, lorsque deux threads veulent acquérir un verrou via lock.lockInterruptably() en même temps, si le thread A acquiert le verrou à ce moment-là et que le thread B attend seulement, alors threadB.interrupt() est appelé thread B. La méthode peut interrompre le processus d’attente du thread B.

2. Exemple

Prenons trylock comme exemple.

Lock lock = ...;
if(lock.tryLock()) {
     try{
         //处理任务
     }catch(Exception ex){
         
     }finally{
         lock.unlock();   //释放锁
     }
}else {
    //如果不能获取锁,则直接做其他事情
}
Copier après la connexion

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal