我正在为我的服务实施一个非常具体的健康检查策略。以下是详细信息:
所有应用程序线程都更新了一个可变的Spring bean" problemDetectedTimestamp"当他们遇到问题时。
我有一个后台线程(使用ScheduledExecutorService实现)每秒运行一次,它更新另一个可变的Spring bean" isServiceHealthy"基于" problemDetectedTimestamp"的值。详细说明,后台线程检查" problemDetectedTimestamp"的值是否为#34;落在最后一个线程执行间隔。如果是,那么" isServiceHealthy" flag更新为" false"。我有一些其他的应用程序逻辑依赖于" isServiceHealthy"标志。
现在,我们有多个线程正在运行,因此,我希望" problemDetectedTimestamp"以线程安全的方式更新,而不会产生使用" synchronized"块。我正在考虑宣布" problemDetectedTimestamp"作为一个volatile变量,确保来自应用程序线程的写入是原子的,我的后台线程从内存而不是从本地缓存中读取它。但是,我不确定如何将bean声明为" volatile"在Spring XML中作为" volatile"是一个特定于java / c ++的概念,我很确定Spring并没有像java那样紧密耦合。