如文档https://docs.marklogic.com/7.0/guide/java/intro#id_71012中所述


  初始配置后,文档管理器是线程安全的;无论您有多少个线程,每种文档类型都只需要一个文档管理器。


我想为每个查询指定不同的页面长度。但是我发现这样做的唯一方法是调用QueryManager的相应方法。所以我需要同步自己:

synchronized (queryManager) {
    queryManager.setPageLength(messagesOnPage);
    queryManager.search(queryDefinition, searchHandle, pageNo);
}


问题:是否可以以其他方式指定页面长度(例如在QueryDefinition中设置)?

我正在使用Marklogic 7.0,client-api-java 2.0.5

谢谢,
Hlib

最佳答案

该文档并未试图警告管理者跨线程共享内部状态。

相反,它试图阐明,只要您选择不改变管理器的配置,就可以跨线程共享一个管理器对象。

如果仅在一个线程中使用查询管理器对象,则该对象对其他线程不可见,因此您无需将更改同步到查询管理器。如果使用QueryManager的线程很多,则由于要更改页面长度,因此应为每个线程创建一个新的QueryManager。

希望能有所帮助,

08-07 15:45