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

时间:2018-05-05 18:29:51

标签: java multithreading testing

如何测试线程? A有MyClass,我想测试一下。 我知道List< Integer>中的内容数字,我想测试在线程完成时onThreadFinished(String someString)是否是正确的字符串值。 那么如何在Thread完成后为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) {
  }

}

2 个答案:

答案 0 :(得分:1)

Thread.join()

join()等待此线程死亡。

答案 1 :(得分:1)

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

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

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

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

如果你的意图是拥有某种游戏循环,你继续做的事情,你的额外线程只是为了最终为你提供一些商品(例如,在你的游戏已经运行时呈现星形背景图像)再次,你应该把它交给一个字段中的应用程序(也就是类变量)。

但是,在这种情况下,您必须担心同步。因为游戏循环一直在检查字段是否已从null更改为值,所以这两个线程相互竞争。

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