6

Używam ThreadSafeList i otrzymuję z tego wiele kilometrów, aby przesyłać strumieniowo dane z procesu do serwera internetowego, a następnie przesyłać strumieniowo dane z powrotem do klienta. W pamięci zapisuję dane w JVM z buforowaniem sprężynowym (ehcache pod maską) i wszystko jest w porządku. Kłopoty zaczęły się, gdy zacząłem uderzać w granice sterty, a Spring Caching zaczął serializować moją listę ThreadSafeList na dysk podczas jej używania, powodując ConcurrentModificationExceptions. Czy mogę nadpisać prywatne metody writeObject i readObject interfejsu Serialization, aby rozwiązać problem? Nie jestem pewien, jak to zrobić, czy powinienem zrezygnować z mojej listy ThreadSafeList.Jak utworzyć listę wątków bezpiecznych do serializacji?

Po uruchomieniu tego programu korzystałem z BlockingDeque, ale nie było to wystarczające, ponieważ kiedy wstawiłem i wziąłem strukturę, nie mogłem zapamiętać danych do buforowania ... Nie mogę użyć ConcurrentMap ponieważ potrzebuję zamawiania na mojej liście ... czy powinienem wybrać ConcurrentNavigableMap? Czuję się jak toczenia własne z ThreadSafeList i niestandardowe funkcje serializacji prywatnych może być marnotrawstwem?

Java Code Geeks ThreadSafeList

+0

Buforowanie wiosenne nie pomaga, jeśli znajdziesz przyczynę problemu. –

Odpowiedz

1

Collections.synchronizedList() uczyni każdy Lista wątku bezpieczny i obsługuje serializacji (jeśli lista bazowy jest Serializable). Pamiętaj, aby zsynchronizować na liście, jeśli chcesz ją powtórzyć.

np.

@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; 
} 
Powiązane problemy