1. Die Erfassungsmethoden
lock(), tryLock(), tryLock(long time, TimeUnit unit) und lockInterruptably() werden alle zum Erfassen von Sperren verwendet.
(1) Die lock()-Methode ist die am häufigsten verwendete Methode, die zum „Erhalten von Sperren“ verwendet wird. Wenn die Sperre von einem anderen Thread erworben wurde, warten Sie. (2) Die tryLock()-Methode hat einen Rückgabewert, was bedeutet, dass sie verwendet wird, um
zu versuchen, die Sperre zu erhalten. Wenn die Erfassung erfolgreich ist, gibt sie „true“ zurück von einem anderen Thread erfasst wurde), gibt sie false zurück. Mit anderen Worten, diese Methode wird in jedem Fall sofort zurückgegeben. Sie werden nicht dort warten, wenn Sie das Schloss nicht bekommen.(3) Die tryLock(long time, TimeUnit-Einheit)-Methode ähnelt der tryLock()-Methode, der einzige Unterschied besteht darin, dass diese Methode eine bestimmte Zeit wartet
, wenn sie die Sperre nicht erhalten kann immer noch innerhalb des Zeitlimits gesperrt. Wenn die Sperre nicht erhalten werden kann, wird false zurückgegeben. Gibt „true“ zurück, wenn die Sperre ursprünglich oder während der Wartezeit erhalten wurde.(4) Die Methode lockInterruptably () ist etwas Besonderes. Wenn der Thread über diese Methode auf den Erhalt der Sperre wartet, kann er auf den Interrupt reagieren, dh auf den Wartezustand des Interrupt-Threads. Mit anderen Worten, wenn zwei Threads gleichzeitig eine Sperre über lock.lockInterruptably() erwerben möchten und Thread A zu diesem Zeitpunkt die Sperre erhält und Thread B nur wartet, wird threadB.interrupt() aufgerufen Thread B. Die Methode kann den Warteprozess von Thread B unterbrechen.
2. Beispiel
Nehmen Sie Trylock als Beispiel. Lock lock = ...;
if(lock.tryLock()) {
try{
//处理任务
}catch(Exception ex){
}finally{
lock.unlock(); //释放锁
}
}else {
//如果不能获取锁,则直接做其他事情
}
Das obige ist der detaillierte Inhalt vonWelche Methoden zur Sperrenerfassung gibt es in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!