Java 如何在首次初始化后创建共享计时器
我有一个多线程java应用程序,其中每个线程都试图从池中获得一个db连接。如果连接不可用,则等待5分钟直到三次尝试,如果三次尝试未创建连接,则失败 我现在想要的是创建一个共享的递减计时器,用值5分钟初始化。当第一次连接失败时,该计时器将启动,线程将进入等待状态5分钟。现在对于进一步的线程,如果发生连接故障并且计时器已经启动,那么选择计时器的当前值并进入等待状态,直到计时器的当前值。现在,每当线程醒来时,它都会重新尝试连接,如果再次失败,它会将计时器重新设置为5分钟以上Java 如何在首次初始化后创建共享计时器,java,multithreading,timer,countdowntimer,Java,Multithreading,Timer,Countdowntimer,我有一个多线程java应用程序,其中每个线程都试图从池中获得一个db连接。如果连接不可用,则等待5分钟直到三次尝试,如果三次尝试未创建连接,则失败 我现在想要的是创建一个共享的递减计时器,用值5分钟初始化。当第一次连接失败时,该计时器将启动,线程将进入等待状态5分钟。现在对于进一步的线程,如果发生连接故障并且计时器已经启动,那么选择计时器的当前值并进入等待状态,直到计时器的当前值。现在,每当线程醒来时,它都会重新尝试连接,如果再次失败,它会将计时器重新设置为5分钟以上 是否有任何可用的解决方案。
是否有任何可用的解决方案。使用
System.currentTimeMillis()
作为共享计时器,并将上次检查的时间戳存储在共享的静态最终原子长
中,您可以getAndSet
或getAndUpdate
每次检查时将读取值与当前时间进行比较,计算它是否在5分钟内。到目前为止您尝试了什么?正如我提到的,如果连接失败,目前我只为每个线程等待5分钟。所以,如果线程1失败并进入5分钟等待,而线程2在3分钟后仍然出现db故障,那么它将进入5分钟等待,而它应该进入2分钟等待