如何使列表线程安全的序列化?

时间:2015-03-25 14:58:22

标签: java multithreading java.util.concurrent concurrentmodification spring-cache

我正在使用一个ThreadSafeList,因为它将数据从一个进程流式传输到一个Web服务器,然后在它进入客户端时将数据流回来,我正在获得很大的收益。在内存中我使用Spring Caching(引擎盖下的ehcache)将数据保存在JVM中,一切都很顺利。当我开始达到我的堆限制并且Spring Caching在我使用它时将我的ThreadSafeList序列化到磁盘时,麻烦就开始了,导致了ConcurrentModificationExceptions。我可以覆盖Serialization接口的私有writeObject和readObject方法来解决问题吗?我不确定如何做或者我应该放弃我的ThreadSafeList。

当我开始这个程序时,我正在使用BlockingDeque,但这还不够,因为当我放置并采用结构时,我无法记住缓存数据......我可以&#39 ; t使用ConcurrentMap,因为我需要在列表中进行排序......我应该选择ConcurrentNavigableMap吗?我想用ThreadSafeList自行编写自定义私有序列化函数可能是一种浪费?

Java Code Geeks ThreadSafeList

1 个答案:

答案 0 :(得分:1)

Collections.synchronizedList()将使任何List线程安全并支持序列化(如果基础列表是Serializable)。如果需要迭代,请记住在列表上进行同步。

e.g。

@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;
}