阻止给定对象上的所有线程

时间:2012-07-27 20:30:59

标签: java concurrency

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

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

3 个答案:

答案 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