我需要基本上为我正在处理的当前项目编写一个锁,当连接失败时,调用给定方法的所有线程都应该挂起,直到重新建立连接。
如何在Java中再次执行此操作?已经有一段时间了,因为我不得不处理这个问题。
答案 0 :(得分:2)
您可以在方法内的Condition等待。条件是这样的:
while (!conn.isConnected) condition.await()
当然,还有比这个伪代码更多的内容。
您可能也希望阅读所谓的circuit breaker pattern。这是一个嗡嗡声的事情,但它的目标是管理可能失败的集成点,比如你与数据库的连接。
答案 1 :(得分:0)
在重新建立连接之前,你不能不从方法返回吗?实际实现将取决于此方法以及如何管理此连接。您可以在对象上wait()
,并且当负责重新连接的另一个线程重新建立连接时,请调用notify()
以取消阻止该方法。这样,调用方法的任何东西都会阻塞,因为当连接断开时,方法永远不会返回。
答案 2 :(得分:0)
您可以使用Object class wait()和notifyAll()方法:
public final void wait(long timeout) throws InterruptedException
导致当前线程等待,直到另一个线程调用 notify()方法或此对象的notifyAll()方法,或者 指定的时间已过。
public final void notifyAll()
唤醒等待此对象监视器的所有线程。一个 线程通过调用其中一个等待来等待对象的监视器 方法
但是,这绝不是唯一可以解决的解决方案。还有其他synchronisation mechanisms in Java