我正在使用一个ThreadSafeList,因为它将数据从一个进程流式传输到一个Web服务器,然后在它进入客户端时将数据流回来,我正在获得很大的收益。在内存中我使用Spring Caching(引擎盖下的ehcache)将数据保存在JVM中,一切都很顺利。当我开始达到我的堆限制并且Spring Caching在我使用它时将我的ThreadSafeList序列化到磁盘时,麻烦就开始了,导致了ConcurrentModificationExceptions。我可以覆盖Serialization接口的私有writeObject和readObject方法来解决问题吗?我不确定如何做或者我应该放弃我的ThreadSafeList。
当我开始这个程序时,我正在使用BlockingDeque,但这还不够,因为当我放置并采用结构时,我无法记住缓存数据......我可以&#39 ; t使用ConcurrentMap,因为我需要在列表中进行排序......我应该选择ConcurrentNavigableMap吗?我想用ThreadSafeList自行编写自定义私有序列化函数可能是一种浪费?
答案 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;
}