gpt4 book ai didi

Java 程序在线程完成之前退出。如何让 Cucumber-JVM 等待线程退出?

转载 作者:行者123 更新时间:2023-11-30 08:31:42 24 4
gpt4 key购买 nike

我正在尝试在我的 Cucumber-JVM 程序中创建一个新线程当我到达某个 BDD 步骤时

然后,一个线程应该做某事,而原始主线程继续运行 cucumber 步骤。

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

我遇到的问题是主程序在线程结束前退出。

这是正在发生的事情:


输出/问题

  • 主程序RunApiTest
  • 线程类ThreadedSteps

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

  1. RunApiTest 开始执行所有步骤
  2. RunApiTest 得到“我应该在 5 分钟内收到一封电子邮件”
  3. RunApiTest 现在创建一个线程 ThreadedSteps,它应该 hibernate 5 分钟。
  4. ThreadedSteps 开始 hibernate 5 分钟
  5. ThreadedSteps 正在 hibernate 时,RunApiTest 继续运行其余的 Cucumber BDD 步骤
  6. RunApiTest 完成并退出,无需等待 ThreadedSteps 完成!

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


这是我的代码

主要 cucumber 类:RunApiTest

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

Cucumber 步骤触发线程: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() 添加到我的线程,但这会停止我的主程序的执行,直到线程完成,然后继续执行程序的其余部分。这不是我想要的,我希望线程在主程序继续执行时 hibernate 。

@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() 放在代码的底部。这样,主线程可以完成其所有任务,然后等待您的线程。

关于Java 程序在线程完成之前退出。如何让 Cucumber-JVM 等待线程退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40517507/

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