Pour éviter l'impasse sur les méthodes où ils acceptent deux paramètres du même typeUtilise identityHashCode pour commander la synchronisation encore valide dans Java 8?
method(Clazz class1, Clazz class2)
Ce qui pourrait être appelé par deux fils avec les mêmes arguments dans un ordre différent
method(a,b)
method(b,a)
Et pour éviter le problème causé en commandant des verrous sur les paramètres pour
synchronized (class1) {
synchronized (class2) {
}
}
est plutôt de commander des serrures en utilisant le résultat identityHashCode de l'ob jets à verrouiller encore une approche valide dans Java 8?
Ceci est décrit dans le livre Dans Concurrency pratique qui est seulement Java 6.
Puisque Java doit être rétrocompatible avec le code existant, pourquoi cette approche serait-elle soudainement * in * valide? Demandez-vous s'il existe une alternative plus à jour? –
identityHashCode n'a jamais été garanti unique, donc je ne vois pas comment cela aurait pu être valide. – user2357112
Le double-contrôle du verrouillage était une fois toujours conseillé aussi – UserF40