java - 如何在一个方法中实现等待另一个方法在java中完成?

标签 java

我有一组方法,比如 m1m2m3m4。每个都需要等待上一个方法完成。如果我调用 m3,它必须等待 m2。我想为每个方法使用标志,如果完成标记它。但是对于通知,如果 m1notify(),我希望这个通知只针对 m2,而不是其他等待方法。

我有一个组件 A,它有 m1m2m3 作为输入法和 m4 作为输出方式。一旦 m3 发生,它将调用 m4 来产生输出。但是m1,m2,m3必须按顺序执行,可以从不同的类调用。必须有等待和相应的信号。

我该如何着手实现它?

最佳答案

BlockingQueues 可以提供帮助,但如果您使用的是 ThreadPoolExecutor,则无济于事。 ThreadPoolExecutor 没有提供开箱即用的解决方案来在队列已满时阻塞(这是执行程序的一部分,而不是队列的功能,因为执行程序使用从不阻塞的 BlockingQueue.offer,如果队列是full 使用 RejectedExecutionHandler)。您可以实现自己的 RejectedExecutionHandler,它会阻塞,直到它可以将内容放入队列中,但这是一种使用锁的快速确定性方法:

ReentrantLock l1 = new ReentrantLock();
ReentrantLock l2 = new ReentrantLock();
ReentrantLock l3 = new ReentrantLock();

l1.lock();
l2.lock();
l3.lock();


// pass l1,l2,l3 along to the threads running these methods, so they are available to the methods:

public void m1() {
 try {
  // do stuff
 }
 finally {
   l1.unlock();
 }
}

public void m2() {
 l1.lock();
 try {
  // do stuff
 }
 finally {
   l2.unlock();
 }
}

public void m3() {
 l2.lock();
 try {
  // do stuff
 }
 finally {
   l3.unlock();
 }
}

public void m4() {
 l3.lock();
 // do stuff
}

关于java - 如何在一个方法中实现等待另一个方法在java中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10850563/

相关文章:

java - 使用 Java 从网页导出日语字符后无法正确显示

java - 如何在同一按钮单击上设置不同的 onclick 监听器?

java - 如何将 mili 秒格式更改为 yyyy-mm-dd hh :mm:ss to insert to mysql with datetype colunm

Java扩展/抽象/实现问题

java - 如何使用 rJava 访问枚举?

java - 设置 TableCellRenderer 在 `JComboBox` 的值列表顶部添加一个空值

java - 使用 setRowSelectionInterval(int, int) 后无法通过箭头键导航 JTable

java - 需要帮助来解析目录的正则表达式

java - Richfaces 4 + JBoss 6 = 部署异常

java - 修改玩家列表计分板