1

我基本上需要为我正在处理的当前项目编写一个锁,当连接失败时,调用给定方法的所有线程都应该挂起,直到重新建立连接。

如何在 Java 中再次执行此操作?自从我不得不处理这个问题以来已经有一段时间了。

4

3 回答 3

2

您可以等待方法内的条件。条件类似于:

while (!conn.isConnected) condition.await()

当然,除了这个伪代码之外,还有很多其他的东西。

您可能还想阅读所谓的断路器模式。有点啰嗦,但它的目标是管理可能失败的集成点,比如您与数据库的连接。

于 2012-07-27T20:56:57.193 回答
0

在重新建立连接之前,您不能不从该方法返回吗?实际实现将取决于此方法以及如何管理此连接。您可以wait()在一个对象上,当另一个负责重新连接的线程重新建立连接时,调用notify()解除阻塞该方法。这样,任何调用该方法的东西都会阻塞,因为当连接断开时该方法永远不会返回。

于 2012-07-27T20:46:46.403 回答
0

您可以使用Object 类的wait() 和 notifyAll() 方法:

public final void wait(long timeout) throws InterruptedException

导致当前线程等待,直到另一个线程为此对象调用 notify() 方法或 notifyAll() 方法,或者经过了指定的时间量。

 public final void notifyAll()

唤醒正在此对象的监视器上等待的所有线程。线程通过调用其中一个等待方法在对象的监视器上等待。

但是,这绝不是向您开放的唯一解决方案。Java中还有其他的同步机制

于 2012-07-27T20:51:15.763 回答