Je développe pour Android 2.2, et un peu confus quant à la façon dont fonctionne ReentrantLocks. Le code suivant peut-il jamais lancer une exception IllegalMonitorStateException? Je demande parce que je ne vois pas comment il peut - selon l'API, tryLock renvoie vrai si et seulement si le verrou est obtenu avec succès - mais parfois la commande unlock() le fait.ReentrantLock Exceptions
public void lockDemo() {
ReentrantLock myLock = new ReentrantLock();
if (myLock.tryLock()) {
System.out.println("Lock obtained");
myLock.unlock();
}
}
L'exemple ne doit pas échouer. Mais votre code actuel est-il vraiment aussi simple? – mdma
Oui et non. Le programme global est un peu plus grand, et a environ 8 threads en cours d'exécution et de partage d'informations. Mais le code à l'intérieur du bloc tryLock() est à peu près aussi simple. Je suis soit en train de copier des primitives vers des variables locales pour les manipuler plus tard, certaines opérations mathématiques, ou d'écrire dans un printWriter. Pour autant que je sache, il n'y a rien qui pourrait gâcher le ReentrantLock. – SirBoss