6

Sto usando un ThreadSafeList e sto ottenendo un grande chilometraggio da esso per lo streaming di dati da un processo a un server web e quindi lo streaming dei dati indietro come entra in un client. In memoria sto salvando i dati nella JVM con Spring Caching (ehcache sotto il cofano) e tutto va bene. Il problema è iniziato quando ho iniziato a colpire i limiti del mio heap e Spring Caching ha iniziato a serializzare il mio ThreadSafeList sul disco mentre lo sto usando, causando ConcurrentModificationExceptions. Posso sovrascrivere i metodi private writeObject e readObject per l'interfaccia di serializzazione per risolvere il problema? Non sono sicuro di come farlo o se dovrei abbandonare la mia ThreadSafeList.Come rendere un elenco thread-safe per la serializzazione?

Indietro quando ho iniziato questo programma stavo usando un BlockingDeque, ma non era sufficiente perché quando ho messo e preso sulla struttura non riuscivo a ricordare i dati per la memorizzazione nella cache ... Non riesco a utilizzare una ConcurrentMap perché ho bisogno di ordinare nella mia lista ... dovrei optare per ConcurrentNavigableMap? Mi sento come se stessi rotolando il mio con un ThreadSafeList e le funzioni di serializzazione privata personalizzate potrebbero essere uno spreco?

Java Code Geeks ThreadSafeList

+0

Il caching di primavera non fa nulla se ciò può aiutare a rintracciare da dove proviene il problema. –

risposta

1

Collections.synchronizedList() farà qualsiasi Lista thread-safe e supporta la serializzazione (se la lista di fondo è Serializable). Ricordarsi di sincronizzare l'elenco se è necessario iterare su di esso.

ad es.

@Cacheable 
public List<String> getData(String clientName) { 
    List<String> data = Collections.synchronizedList(new ArrayList<String>()); 
    // load data for the client from external process and add it to the list... 
    return data; 
} 
Problemi correlati