Comment voulez-vous mettre en œuvre un cache LRU en Java?

S'il vous plaît ne pas dire EHCache ou OSCache, etc. Supposons, pour les fins de cette question que je veux implémenter mon propre juste en utilisant le kit de développement (learning by doing). Étant donné que le cache doit être utilisé dans un environnement multithread, ce qui structures de données utilisez-vous? J'ai déjà mis en place une aide LinkedHashMap et Les Collections de#synchronizedMap, mais je suis curieux de savoir si l'une des nouvelles concurrentes des collections seraient de meilleurs candidats.

Mise à JOUR: je viens de lire à travers Yegge dernier quand j'ai découvert cette pépite:

Si vous avez besoin de constante de temps d'accès et que vous souhaitez maintenir l'ordre d'insertion, vous ne pouvez pas faire mieux qu'une LinkedHashMap, une très bonne structure de données. La seule façon dont il pourrait être plus merveilleux est que si il y avait une version simultanée. Mais hélas.

Je pensais presque exactement la même chose avant, je suis allé avec le LinkedHashMap + Collections#synchronizedMap mise en œuvre je l'ai mentionné ci-dessus. Agréable de savoir que je n'avais pas juste oublié quelque chose.

Sur la base des réponses jusqu'à présent, il semble que mon meilleur pari pour une très simultanées LRU serait d'étendre ConcurrentHashMap à l'aide de certains de la même logique que LinkedHashMap utilise.

InformationsquelleAutor Hank Gay | 2008-10-21