当前位置: 首页 > 知识库问答 >
问题:

如何在线程完成时测试结果-java

娄阳舒
2023-03-14

如何测试线程?A有我的课,我想测试一下。我知道名单上有什么

class MyClass {

  public void startMyClass(List numbers) {
      Thread thread = new Thread() {

        @Override
        public void run() {

          while(...) {
            // ...do something...
          }

          onThreadFinished(someString);
        }
      }
      thread.start();
  }


  protected void onThreadFinished(String someString) {
  }

}

共有2个答案

邢飞昂
2023-03-14
Thread.join()

join()等待此线程死亡。

姚建树
2023-03-14

案例1:做事,然后等待结果,然后继续。

<代码>神话阅读。join()用于创建线程的代码在启动线程后执行更多操作,然后希望等待线程结果的情况。一旦线程的代码完成,线程就会死亡,因此应用程序在join()调用后继续执行。

要从线程中提供应用程序信息,您必须将其存储在某个位置,例如,存储在专用于此的字段中。您不必担心同步问题,因为一旦线程死机,其所有操作都将成为“常识”,它们不再是私人计时的(或其他)。

案例2:坚持做事,定期检查是否有结果。

相反,如果您的目的是进行某种游戏循环,在这种循环中您一直在做一些事情,而您的额外线程只是为了最终向您交付一些商品(例如,在游戏已经运行时渲染星形背景图像),那么您应该再次将其交给字段中的应用程序(也称为类变量)。

但是,在这种情况下,您必须担心同步问题。因为当游戏循环不断检查字段是否从空变为值时,两个线程正在相互竞争。

因此,在这种情况下,您需要一个额外的对象来进行同步,理想情况下,这是一个用于此任务的专用对象,例如,final private html" target="_blank">object lockForBackgroundCalculation=new object() ,当线程将其结果值写入另一个字段时,您可以将该语句包装到同步(lockForBackgroundCalculation){…} ,您还可以将游戏循环对字段值的检查包装到完全相同的同步块文本中。

 类似资料:
  • 我查看了文档并找到了invokeAny ExecutorService,但这将返回任何已成功完成的线程的结果,而不一定是第一个线程。

  • 我有4条线。每个人每x秒打印给定的字母x次。任务是一次启动3个线程,在至少一个前一个线程完成时启动第四个线程。我不知道如何通知最后一个线程在适当的时间运行。

  • 问题内容: 根据测试运行的总体测试结果,我要执行条件拆卸。这意味着必须在执行完所有测试之后但离开测试运行程序之前,才能访问总体测试结果。我该如何实现? 问题答案: 我找不到合适的pytest挂钩来访问总体测试结果。 你不需要一个 自己收集测试结果。这是我需要批量访问测试结果时通常使用的蓝图: 现在所有测试结果都存储在dict下;用法示例: 运行测试将产生: 编辑: 如果总体退出代码()是足够的信息

  • 但这一个也不起作用。正确的答案是加入线程并删除2个睡眠: 我的问题是:为什么我的答案都不能被接受?我的实验室领导问,但他不能给我一个答案。在家里编写了测试代码,它似乎工作得很好。提前感谢您的帮助!

  • 我正在和TestNG一起学习Java中的Selenium Webdriver。我正在使用谷歌登录页面进行测试。 我在按顺序运行测试用例时遇到了麻烦。我想做的是: 运行@BeforeTest 运行测试 1(登录成功) 运行@AfterTest(关闭浏览器和驱动程序) 等到 AfterTest 方法完成,然后运行测试 2(登录失败) 但我的经历是: 运行@BeforeTest 运行测试 1(登录成功)

  • 问题内容: 有什么方法可以简单地等待所有线程处理完成?例如,假设我有: 如何更改此方法,以便该方法在注释处暂停直到所有线程的方法退出?谢谢! 问题答案: 你将所有线程放入数组中,全部启动,然后进行循环 每个连接将阻塞,直到相应的线程完成为止。线程的完成顺序可能不同于你加入线程的顺序,但这不是问题:退出循环时,所有线程均已完成。