我正在使用 Map 构建一个小型缓存,其中包含一些数据库查询的缓存结果。假设这个缓存是以线程安全的方式填充的。我的问题是关于此缓存中的条目,即 Result 类型的对象。
考虑以下场景:
线程 1 从缓存中读取并获取一些 Result 对象,将其称为 R。线程 2 想要相同的对象 R 被杀死,因此它调用缓存来杀死对象 R。
看到两个线程如何只持有对对象 R 的引用,由于线程 2 已发出调用以杀死它,因此对象 R 可能突然为线程 1 变为空。
我该如何避免这种情况?当线程从缓存中读取时,我是否应该制作对象 R 的深层副本,以便即使线程 2 杀死缓存,线程 1 仍然能够完成它正在做的事情而不会出现问题?或者有另一种方法吗?我在线程和并发方面的经验并不是最大的,所以要温柔......