2012-07-27 22 views
1

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

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

回答

2

您可以在方法内部等待Condition。条件会是这样的:

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

当然,这个伪代码还有很多。

您也可以阅读所谓的circuit breaker pattern。一种流行的罗嗦的事情,但它的目标是管理可能失败的集成点,如连接到数据库。

0

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

0

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

public final void wait(long timeout) throws InterruptedException 

导致当前的线程等待,直到其他线程调用 notify()方法或对notifyAll的()方法此对象或指定的时间量已过去。

public final void notifyAll() 

唤醒在等待该对象的监视器上的全部线程。 A 线程通过调用等待 方法之一等待对象的监视器。

但是,这绝不是唯一对您开放的解决方案。还有其他synchronisation mechanisms in Java