gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:08:00 25 4
gpt4 key购买 nike

如何测试线程? 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/

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