如文档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
答案 0 :(得分:3)
该文档并未试图警告管理员跨线程共享内部状态。
相反,它试图澄清,只要管理员的配置没有改变,你可以选择跨线程共享一个管理器对象。
如果您只在一个线程中使用查询管理器对象,则它对其他线程不可见,因此您无需将更改同步到查询管理器。如果您有许多使用QueryManager的线程,则应该为每个线程创建一个新的QueryManager,因为您正在更改页面长度。
希望有帮助,