6

Tôi đang sử dụng một ThreadSafeList và tôi đang nhận được số dặm lớn ra khỏi nó để truyền dữ liệu từ một quá trình đến một máy chủ web và sau đó streaming dữ liệu trở lại như nó đến trong một khách hàng. Trong bộ nhớ tôi đang lưu dữ liệu trong JVM với Spring Caching (ehcache dưới mui xe) và tất cả đều tốt. Sự cố bắt đầu khi tôi bắt đầu đạt đến giới hạn heap và Spring Caching đã bắt đầu serialize ThreadSafeList của tôi vào đĩa trong khi tôi đang sử dụng nó, gây ra ConcurrentModificationExceptions. Tôi có thể ghi đè lên các phương thức writeObject và readObject riêng cho giao diện Serialization để giải quyết vấn đề không? Tôi không chắc chắn làm thế nào để làm điều này hoặc nếu tôi nên từ bỏ ThreadSafeList của tôi.Làm thế nào để tạo danh sách an toàn cho chuỗi để tuần tự hóa?

Quay lại khi tôi bắt đầu chương trình này, tôi đã sử dụng BlockingDeque, nhưng nó không đủ vì khi tôi đặt và đảm nhận cấu trúc, tôi không thể nhớ dữ liệu cho bộ nhớ đệm ... Tôi không thể sử dụng ConcurrentMap vì tôi cần đặt hàng trong danh sách của mình ... tôi có nên dùng ConcurrentNavigableMap không? Tôi cảm thấy như lăn của riêng tôi với một ThreadSafeList và tùy chỉnh chức năng serialization tư nhân có thể là một sự lãng phí?

Java Code Geeks ThreadSafeList

+0

Bộ nhớ đệm mùa xuân không có tác dụng nếu điều đó có thể giúp bạn theo dõi vị trí của sự cố. –

Trả lời

1

Collections.synchronizedList() sẽ thực hiện bất kỳ Danh sách thread-safe và hỗ trợ serialization (nếu danh sách cơ bản là Serializable). Nhớ đồng bộ hóa trên danh sách nếu bạn cần lặp lại nó.

ví dụ:

@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; 
} 
Các vấn đề liên quan