有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何为序列化创建线程安全列表?

我使用的是ThreadSafeList,我从中获益匪浅,可以将数据从进程流式传输到Web服务器,然后将数据流式传输回客户端。在内存中,我使用Spring缓存(引擎盖下的ehcache)将数据保存在JVM中,一切正常。当我开始达到堆限制,Spring缓存开始在我使用ThreadSafeList时将其序列化到磁盘,导致ConcurrentModificationException时,问题就开始了。我是否可以覆盖序列化接口的私有writeObject和readObject方法来解决此问题?我不确定如何做,或者是否应该放弃我的ThreadSafeList

当我启动这个程序时,我使用了一个BlockingDeque,但这还不够,因为当我放置和接受这个结构时,我记不起要缓存的数据。。。我不能使用ConcurrentMap,因为我需要在列表中排序。。。我应该去ConcurrentNavigableMap吗?我觉得使用ThreadSafeList和自定义私有序列化函数来实现自己的功能可能是一种浪费

Java Code Geeks ThreadSafeList


共 (1) 个答案

  1. # 1 楼答案

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

    例如

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