Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅在上一个功能完成时启动功能_Java - Fatal编程技术网

Java 仅在上一个功能完成时启动功能

Java 仅在上一个功能完成时启动功能,java,Java,我有3个方法,它们是从前端调用的。调用上一个函数后,只能调用一个函数,但不一定需要调用所有函数。因此,您可以只调用f1,也可以调用f1->f2或f1->f2->f3 我的问题是,在前端,您可以在上一个函数停止运行之前单击该函数。我需要在下一个函数开始运行之前完成每个函数 我现在正在做的是暂停执行,直到上一个函数结束,但我想得到一个更好的答案: f1 { ready1=false ... ready1=true } f2 {

我有3个方法,它们是从前端调用的。调用上一个函数后,只能调用一个函数,但不一定需要调用所有函数。因此,您可以只调用f1,也可以调用f1->f2或f1->f2->f3

我的问题是,在前端,您可以在上一个函数停止运行之前单击该函数。我需要在下一个函数开始运行之前完成每个函数

我现在正在做的是暂停执行,直到上一个函数结束,但我想得到一个更好的答案:

    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以查看数据是否存在。如果不是,请等待,然后再次检查,最终以错误响应超时。不过,我理解不想在传统产品上投入太多时间。祝你好运。