gpt4 book ai didi

java - 分布式 Spring REST 服务中的线程安全

转载 作者:行者123 更新时间:2023-12-02 02:46:28 25 4
gpt4 key购买 nike

我的 Spring Rest Controller 是否会通过 @Autowired 使用 @Service 类,并且 @Service 类具有关键部分 - 在实例上同步字段

privatefinalObjectmodifyIndexLock = newObject();准备好分布式部署还是我需要以其他方式同步?

底层资源是 Lucene Index Writer,在任何时间点只能打开一个 writer。当编写器已经打开时,尝试打开编写器的线程将会失败。我不希望我的线程失败,但请等待。

代码对于单个服务器应用程序部署来说工作正常,但我猜,它在分布式环境中会失败,因为每个 JVM 中都会有多个 @Service 实例,从而导致不同的锁定,而底层 protected 资源被一个。

synchronized(modifyIndexLock){
//Open & use writer the close
}

写入器池不可用,但只有一个实例可用。

IndexWriter

最佳答案

如果您有一个分布式应用程序,那么每个实例都使用自己的锁,绝对不能保证对共享资源的独占访问。您需要使用分布式锁(例如使用 Zookeeper),或者也可以使用关系数据库来提供您需要的锁。例如:https://www.xaprb.com/blog/2006/07/26/how-to-coordinate-distributed-work-with-mysqls-get_lock/

关于java - 分布式 Spring REST 服务中的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44499864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com