Java 仅在上一个功能完成时启动功能
我有3个方法,它们是从前端调用的。调用上一个函数后,只能调用一个函数,但不一定需要调用所有函数。因此,您可以只调用f1,也可以调用f1->f2或f1->f2->f3 我的问题是,在前端,您可以在上一个函数停止运行之前单击该函数。我需要在下一个函数开始运行之前完成每个函数 我现在正在做的是暂停执行,直到上一个函数结束,但我想得到一个更好的答案:Java 仅在上一个功能完成时启动功能,java,Java,我有3个方法,它们是从前端调用的。调用上一个函数后,只能调用一个函数,但不一定需要调用所有函数。因此,您可以只调用f1,也可以调用f1->f2或f1->f2->f3 我的问题是,在前端,您可以在上一个函数停止运行之前单击该函数。我需要在下一个函数开始运行之前完成每个函数 我现在正在做的是暂停执行,直到上一个函数结束,但我想得到一个更好的答案: f1 { ready1=false ... ready1=true } f2 {
f1 {
ready1=false
...
ready1=true }
f2 {
ready2=false
while (!ready1) {Thread.sleep(250);}
...
ready2=true }
f3 {
while (!ready2) {Thread.sleep(250);}
...
}
有没有一个简单的方法可以做到这一点?听起来你在使用一个web框架,所以可能包括这个框架,它会有一些内置的工具。一个例子是使用内置java工具
class NoLookingBack{
CountDownLatch latchB = new CountDownLatch(1);
public void methodA(){
//do work.
latchB.countDown();
}
public void methodB(){
try{
latchB.await();
} catch(InterruptException e){
//do something or declare this method throws.
return;
}
}
}
我认为这说明了在必要时可以通过添加更多锁存来包含更多方法
你的例子有缺陷,这个解决方案也有缺陷。如果methodA失败,那么methodB将永远阻塞。闩锁使您能够使用超时值,然后您可以使用指示故障的响应。您可以使用if..else..运行下一个函数。当您希望顺序执行时,为什么要使用并行线程?禁用/启用按钮如何?这些函数是从前端调用的;所以你不知道何时,甚至是否会调用它们,我们使用了很多repo,所以我不能改变这些函数的调用方式。啊,这听起来像是一个设计问题。似乎只需要一个“函数”而不是3个。如果我理解正确,问题标题应该是“如何将0-3个图像上载到服务器”。听起来它们甚至不需要是连续的,但是您以前的代码破坏了数据,所以您决定这样做。我建议回到你的旧代码并修复它,而不是试图让这个怪物工作。无论如何,睡眠的条件是最多只持续2秒,但即使上传失败,该功能仍将结束。上一个函数的成功或失败对下一个函数并不重要,但会尝试你的方法solution@DOHere除了使用
.await
,而不是sleep之外,这几乎是一样的。这两种解决方案似乎都违反了http请求的无状态原则。您不希望依赖同一个nolookback
类来处理您的请求。此解决方案无法扩展,并且取决于框架,无法工作。你真的应该包括所使用的框架。它是一个更大的应用程序,包含服务、Web服务和前端。我提到的函数在应用程序服务部分的DAO类中。我知道这种解决方案不是最优的,但这是一个旧的java应用程序,它不是优先考虑的问题。你真的不应该使用类实例的状态来查看是否调用了该方法。您应该查询DAO以查看数据是否存在。如果不是,请等待,然后再次检查,最终以错误响应超时。不过,我理解不想在传统产品上投入太多时间。祝你好运。