线程完成之前,Java程序退出。如何使黄瓜JVM等待线程退出?

凯蒂

我试图创建一个新的线程在我的黄瓜,JVM程序,当我达到一定的BDD一步

然后,一个线程应该在做某事,而原始的主线程将继续运行黄瓜步骤。

在所有线程完成之前,程序不应该退出。

我快到的问题,主要是程序退出线程完成之前。

这是正在发生的事情:


输出/问题

  • 主程序RunApiTest
  • 线程类ThreadedSteps

这是运行程序时发生的情况:

  1. RunApiTest 启动完成所有步骤去
  2. RunApiTest 进入“我应该在5分钟内收到一封电子邮件”
  3. RunApiTest现在创建一个线程ThreadedSteps,该线程应休眠5分钟。
  4. ThreadedSteps 开始睡5分钟
  5. 虽然ThreadedSteps处于睡眠状态,RunApiTest继续运行的黄瓜BDD的其余步骤
  6. RunApiTest完成并退出,无需等待ThreadedSteps到结束

如何让我的程序等待,直到我的线程完成?


这是我的代码

主要黄瓜类RunApiTest

@RunWith(Cucumber.class)
@CucumberOptions(plugin={"pretty"}, glue={"mycompany"}, features={"features/"})
public class RunApiTest {
}

黄瓜步骤来触发主题email_bdd

@Then("^I should receive an email within (\\d+) minutes$")
public void email_bdd(int arg1) throws Throwable {
     Thread thread = new Thread(new ThreadedSteps(arg1));
     thread.start();
}

线程类ThreadedSteps

public class ThreadedSteps implements Runnable {

    private int seconds_g;

    public ThreadedSteps(Integer seconds) {
        this.seconds_g = seconds;
    }

    @Override
    public void run() {
        Boolean result = waitForSecsUntilGmail(this.seconds_g);
    }

    public void pauseOneMin()
    {
        Thread.sleep(60000);
    }

    public Boolean waitForSecsUntilGmail(Integer seconds)
    {
        long milliseconds = seconds*1000;
        long now = Instant.now().toEpochMilli();
        long end = now+milliseconds;

        while(now<end)
        {
            //do other stuff, too
            pauseOneMin();
        }
        return true;
    }
}

尝试#1

我尝试添加join()到我的线程,但我停止主程序的执行,直到线程已完成,然后继续执行该程序的其余部分。这不是我想要的,我想要线程睡眠,而主程序继续执行。

@Then("^I should receive an email within (\\d+) minutes$")
public void email_bdd(int arg1) throws Throwable {
     Thread thread = new Thread(new ThreadedSteps(arg1));
     thread.start();
     thread.join();
}
义大利汉堡

thread.join()正是这么做的-它要求程序中止执行,直到线程终止。如果你希望你的主线程继续做工作,你需要把你join()的代码的底部。这样,主线程可以完成所有任务及其那么等待你的线程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章