2009-06-02 14 views
14

Ehcache supporta il multi-threading di default o richiede modifiche alla configurazione? Nel multi-threading la mia applicazione con Ehcache ho scoperto che il conteggio degli accessi al DB è in realtà in aumento, quindi non esiste una cache globale disponibile per tutti i thread nonostante il fatto che la mia cache sia tutta Singletons. Eventuali suggerimenti?Ehcache & MultiThreading

risposta

11

Questo può aiutare a rispondere alla tua domanda, da the FAQ:

E 'thread-safe per modificare i valori elemento dopo il recupero da una cache?

Ricordare che un valore in un elemento di cache è accessibile a livello globale da più thread. Non è intrinsecamente thread safe modificare il valore. È più sicuro recuperare un valore, eliminare l'elemento cache e quindi reinserire il valore.

(enfasi aggiunta da me)

+1

Un'altra opzione è osservare l'API di blocco esplicito ehcache: http://ehcache.org/documentation/explicitlocking.html, poiché qualsiasi discussione su ehcache e multithreading è forse incompleta senza considerare anche questo aspetto. –

1

Dal official documentation appare è appositamente costruito e testato per funzionare bene sotto l'accesso altamente concomitante, finché non si modificano Element dai più thread .

Ma, ovviamente, questo non significa che l'uso di Ehcache rende sicure altre parti del codice. Se si recupera lo stesso valore da più thread (utilizzando la stessa chiave), l'istanza può essere condivisa e è necessario sapere cosa si sta facendo prima di modificarlo. La cosa migliore sembra usare oggetti immutabili come stringhe come valori memorizzati nella cache.