我有两个不同的线程,其中一个将信息放入 Gemfire 区域,另一个从同一个 Gemfire 区域读取并删除相同的信息。问题是:如果第二个线程忙,第一个线程继续将信息放入 Gemfire 区域。
需要什么 - 如果达到区域中的某些项目限制,则阻止第一个线程。可以手动实现此功能,但 Gemfire 中可能已经存在相同的机制?
GemFire 没有任何类型的阻塞队列抽象,所以你是对的,你必须手动实现它。但是,我还想问你为什么觉得有必要以这种方式限制 GemFire?如果您担心内存消耗,您始终可以将您的区域配置为在达到特定条目计数阈值或达到堆阈值时溢出到磁盘。
不要认为 gemfire 可以选择阻止 put 操作,但它可以选择溢出到磁盘。
但是,如果您仍然想使用阻止选项。您可以在您的区域上使用 CacheListener 并且可以执行大小操作和块/睡眠操作。放置操作将被阻止,直到侦听器完成。
您可以轻松地重用/删除/添加侦听器组件。