我有一个多线程java应用程序,其中每个线程都尝试从池中获取数据库连接。如果连接不可用,则等待5分钟直至三次尝试,如果连接未在三次尝试中创建,则会失败。
我现在想要的是创建一个用值5分钟初始化的共享递减计时器。当第一次连接失败并且线程将进入等待状态5分钟时,此计时器将启动。现在对于更多线程,如果发生连接失败并且定时器已经启动,则选择定时器的当前值并进入等待状态直到定时器的当前值。现在每当线程被唤醒时,如果再次失败,它将重新尝试连接并将计时器重新设置为5分钟。
是否有现成的解决方案。
答案 0 :(得分:1)
使用System.currentTimeMillis()
作为共享计时器并将上次检查的时间戳存储在共享static final AtomicLong
中,您可以在每次检查时getAndSet
或getAndUpdate
并比较读取使用当前时间值计算它是否在5分钟内。