Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在首次初始化后创建共享计时器_Java_Multithreading_Timer_Countdowntimer - Fatal编程技术网

Java 如何在首次初始化后创建共享计时器

Java 如何在首次初始化后创建共享计时器,java,multithreading,timer,countdowntimer,Java,Multithreading,Timer,Countdowntimer,我有一个多线程java应用程序,其中每个线程都试图从池中获得一个db连接。如果连接不可用,则等待5分钟直到三次尝试,如果三次尝试未创建连接,则失败 我现在想要的是创建一个共享的递减计时器,用值5分钟初始化。当第一次连接失败时,该计时器将启动,线程将进入等待状态5分钟。现在对于进一步的线程,如果发生连接故障并且计时器已经启动,那么选择计时器的当前值并进入等待状态,直到计时器的当前值。现在,每当线程醒来时,它都会重新尝试连接,如果再次失败,它会将计时器重新设置为5分钟以上 是否有任何可用的解决方案。

我有一个多线程java应用程序,其中每个线程都试图从池中获得一个db连接。如果连接不可用,则等待5分钟直到三次尝试,如果三次尝试未创建连接,则失败

我现在想要的是创建一个共享的递减计时器,用值5分钟初始化。当第一次连接失败时,该计时器将启动,线程将进入等待状态5分钟。现在对于进一步的线程,如果发生连接故障并且计时器已经启动,那么选择计时器的当前值并进入等待状态,直到计时器的当前值。现在,每当线程醒来时,它都会重新尝试连接,如果再次失败,它会将计时器重新设置为5分钟以上


是否有任何可用的解决方案。

使用
System.currentTimeMillis()
作为共享计时器,并将上次检查的时间戳存储在共享的
静态最终原子长
中,您可以
getAndSet
getAndUpdate
每次检查时将读取值与当前时间进行比较,计算它是否在5分钟内。

到目前为止您尝试了什么?正如我提到的,如果连接失败,目前我只为每个线程等待5分钟。所以,如果线程1失败并进入5分钟等待,而线程2在3分钟后仍然出现db故障,那么它将进入5分钟等待,而它应该进入2分钟等待