gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:59:05 25 4
gpt4 key购买 nike

我有一组方法,比如 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com