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

标签 java multithreading testing

如何测试线程? A 有 MyClass,我想测试一下。 我知道 List 数字中的内容,我想测试线程完成时 onThreadFinished(String someString) 中的字符串值是否正确。 那么如何在线程完成后为方法 onThreadFinished(String someString) 创建测试。

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) {
  }

}

最佳答案

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

myThread.join() 适用于创建线程的代码在启动线程后执行更多操作,然后想要等待线程结果的情况。一旦线程的代码完成,线程就会终止,因此应用程序会在 join() 调用后继续执行。

要从线程中提供应用程序信息,您必须将其存储在某个地方,例如在专门用于此的领域。您不必担心同步,因为一旦线程死亡,它的所有操作都将成为“常识”,它们不再是私有(private)定时(或其他)。

案例 2:继续做事,并定期检查结果是否可用。

相反,如果您的意图是拥有某种游戏循环,您可以在其中继续做事,而您的额外线程只是为了最终向您交付一些商品(例如,在您的游戏已经运行时渲染星空背景图像) ,您应该再次将它交给字段中的应用程序(也称为类变量)。

不过,在那种情况下,您必须担心同步问题。因为随着游戏循环不断检查该字段是否已从 null 更改为值,所以两个线程正在相互竞争。

因此,在那种情况下,您需要一个额外的对象来同步,最好是一个专门用于此任务的对象,例如final private Object lockForBackgroundCalculation = new Object();,当线程将其结果值写入另一个字段时,您将该语句包装到 synchronized(lockForBackgroundCalculation){...},并且您还将游戏循环对字段值的检查包装到完全相同的同步块(synchronized block)文本中。

关于java - 线程完成时如何测试结果 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50192766/

相关文章:

testing - 更改加特林脚本中特殊字符的表示

Java Spring : MongoRepository count() and findAll()

java - 404 未找到 : Something wrong with access to a servlet deployed on Tomcat

java - 为什么 Impala 不能在 Spark SQL 写入后读取 parquet 文件?

java - 多个线程执行相同的方法(非同步)行为

Python 套接字,高级聊天框

c++ - 系统调用 - sys/syscall.h - 不是这样的文件或目录 -

java - 关于java中的HashMap实现

scala - 如何使用akka-http设计一个rest api以便于测试?

javascript - Jasmine:如何监视内部对象方法调用?