使用ConcurrentMap实现高效可靠的原子操作
问题:服务器S1从远程获取多个文件到本地处理。这些文件的数据会被Processor转换成不同类型的数据模型存放至S1的数据库。每个Processor处理逻辑是相互独立的,但是同一个文件的数据可能会被多个Processor访问。为了提高数据模型的转换效率,需要将文件进行缓存,已经被缓存的文件不能被重复缓存。问题代码如下: [java] view plain copypublic class CacheManager { private Collection<String> cachedFiles = new ArrayList<>(); public void tryCache(String file) { if (!cachedFiles.contains(file)) { doCache(file); cachedFiles.add(file); } } } 在多线程环境下,tryCache方法的逻辑会存在由“线程交织”所带来的文件被重复缓存的问题。 以下几种解决方法点评一下: 1 一种错误的方法 将cachedFiles字段使用诸如ConcurrentSki...