我正在使用JCS在我的应用程序中进行缓存。最近出现了一些错误,其中并发访问高速缓存中的数据导致空值即ie一个线程写入缓存,一个线程读取缓存。我想知道当从缓存写入和读取时,JCS是否支持线程安全实现。 我也想知道如何让我的实现线程安全。因为我有多个类写入缓存,比如PutData实现Runnable用于写入缓存,GetData也实现Runnable用于从缓存中读取,因此使得同步的方法没有意义,并且使它们成为原子也是没有意义的,因为数据不是在类之间共享的,而是将数据对象传递给各个类.BTW我正在使用POJO串行化类。 有没有办法克服这个问题,还是我必须改变我的实现方式,以便强制完成写作然后阅读,这是愚蠢的我认为。JCS并发错误
这更像是一个生产者 - 消费者问题,除非我的消费者线程不是在使用数据,而是在读取数据。 因此,同步确保只有一个线程写入缓存,但这并不能解决我的问题,因为另一个线程访问不同密钥的对象。
期待你的回答, 谢谢, 马杜。
@MadhuSudhan所以你没有把同步块_into_的方法和同步在_same_缓存实例? – Thomas
我已经试过了,因为我使用的是runnable接口,所以我尝试了public void run()方法,但它没有任何效果。我也对调用方法使用了synchronized,仍然没有效果。是否有任何接口我可以在servlet中实现诸如SingleThreadModel。 – Madusudanan
@MadhuSudhan看到我编辑的答案。你不同步方法本身,但添加一个'synchronized'块_inside_方法并在_cache instance_上同步,而不是在任何非共享对象上。 – Thomas