我试图创建一个新的线程在我的黄瓜,JVM程序,当我达到一定的BDD一步。
然后,一个线程应该在做某事,而原始的主线程将继续运行黄瓜步骤。
在所有线程完成之前,程序不应该退出。
我快到的问题,主要是程序退出线程完成之前。
这是正在发生的事情:
RunApiTest
ThreadedSteps
。这是运行程序时发生的情况:
RunApiTest
启动完成所有步骤去RunApiTest
进入“我应该在5分钟内收到一封电子邮件”RunApiTest
现在创建一个线程ThreadedSteps
,该线程应休眠5分钟。ThreadedSteps
开始睡5分钟ThreadedSteps
处于睡眠状态,RunApiTest
继续运行的黄瓜BDD的其余步骤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;
}
}
我尝试添加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] 删除。
我来说两句