2017-10-14 6 views
0

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.

+1

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? –

+1

identityHashCode n'a jamais été garanti unique, donc je ne vois pas comment cela aurait pu être valide. – user2357112

+0

Le double-contrôle du verrouillage était une fois toujours conseillé aussi – UserF40

Répondre

0

En un mot - oui. Les mêmes principes sont toujours présents dans Java 8.