代码之家  ›  专栏  ›  技术社区  ›  dvlcis

如何按自定义顺序从映射/集的值处理invokeAll EntryProcessor?

  •  0
  • dvlcis  · 技术社区  · 6 年前

    对于功能:

     invokeAll()  
    

    它使用包含将要处理的项的映射/集,我希望按自定义顺序处理每个项,即与键顺序相同。 在文档中:

    键的条目处理顺序未定义。实现可以选择以任意顺序处理条目,包括同时处理。此外,不保证实现将使用相同的EntryProcessor实例来处理每个条目,具体情况可能是在非本地缓存拓扑中。

    对于此行:

    实现可以选择以任意顺序处理条目,包括同时处理

    我不知道怎么做,有什么例子吗? 如果我使用treemap/treeset保存带顺序的键,那么条目在treemap/treeset中的处理方式是否与其键顺序相同?

    顺便说一句,由于invoke有一个内部锁,invokeAll是否还将持有map/set中所有键的锁,直到EntryProcessor完成?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Stanislav Lukyanov    6 年前

    实际上,您所指的文档是从 javax.cache.Cache::invokeAll . "实施”在这里指的不是 EntryProcessor 但是JSR166的实现(aka jcache,aka javax.cache 包)然后点燃 IgniteCache .

    本文件的意思是 javax.cache.Cache 接口允许其实现调用 入口处理器 任何顺序。点火选择不给它任何额外的细节,并且没有办法影响这里的秩序。

    另外,记住点火是分布的,所以在 invokeAll 本质上是并发的。如果您需要严格的顺序,最好迭代键并使用 invoke 在每把钥匙上。