bounty将在2小时后过期。回答此问题可获得+200声望奖励。NG.希望吸引更多人关注此问题。
我正在尝试使用vlv在LDAP中实现分页,参考文档https://docs.ldap.com/ldap-sdk/docs/javadoc/com/unboundid/ldap/sdk/controls/VirtualListViewRequestControl.html
单线程运行正常,但当尝试同时运行多个线程(最多5个线程)时运行正常,但随着线程数量的增加,只有5个线程可以成功运行,超过了失败的线程,并显示以下错误消息:
LDAPException(resultCode=51 (busy), numEntries=0, numReferences=0, diagnostiMessage='Other sort requests already in progress', ldapSDKVersion=5.1.1..
我正在使用OpenLDAP,Unboundid API与Java连接。关于数据大小,它是100k左右。
- 已尝试使用单个连接和多个连接(具有多个并发线程),但在两种情况下均出现相同的错误。
- 尝试同步块以提取数据。
- 出现异常时,让线程等待并重试。以上所有操作都不起作用,线程无法从LDAP中获取数据。在尝试关闭并重新连接https://www.openldap.org/lists/openldap-technical/201107/msg00006.html中所述的连接后,失败的线程可以获取数据,但在重试了很多次后,在我的情况下,线程重试了大约2k次,然后开始获取数据。
有没有更好的解决方案,重试2k次并获得结果不是一个好的选择。
1条答案
按热度按时间gojuced71#
根据我在JAVA中的经验,最好使用
thread pools
,它将您的解决方案从“如何管理线程”转变为更健壮和面向任务的解决方案。**(您的用例)要点:**您可能希望定义一个具有固定大小线程的线程池。该池将通过重用池中的线程来管理所有传入的负载。这非常有效,因为线程越多并不意味着性能越高。您可能希望使用重用线程的机制,而不是只打开和关闭线程并使用过多的线程。
您可以从类似以下内容开始:
这是一段过于简化的代码,但您可以清楚地看到:
我觉得你应该给予一试。。毕竟--重试2000次才成功真的不是那种闲🙃