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

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

王林
王林avant
2023-05-19 13:13:062006parcourir

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 {
    //如果不能获取锁,则直接做其他事情
}

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