【发布时间】:2011-12-22 15:05:36
【问题描述】:
我有一个执行非常复杂操作的对象实例。
所以在第一种情况下,我创建一个实例并将其保存为我自己的自定义缓存。
如果他发现一个现成的对象已经存在于缓存中,那么从下一次任何线程来,他们都会从缓存中取出它,以便在性能方面保持良好。
我担心如果两个线程具有相同的实例会怎样。这两个线程是否有可能相互破坏。
Map<String, SoftReference<CacheEntry<ClassA>>> AInstances= Collections.synchronizedMap(new HashMap<String, SoftReference<CacheEntry<ClassA>>>());
【问题讨论】:
-
缓存是分发对它的副本的引用,还是手工复制?线程如何将更改写入缓存对象?这些写入是否绕过缓存?如果是这样,是否因为缓存上的副本过时而从缓存中弹出数据?
-
这取决于您的缓存,请发布您的代码。
-
不依赖于实例的线程安全吗?您还可以同步对缓存的访问并只允许一个线程占用您的实例。
-
缓存如上维护。
标签: java multithreading caching