【发布时间】:2011-04-24 14:51:58
【问题描述】:
在我当前的 android 仪器测试中,我有一个小竞争条件。我想要的是:
- T1:启动线程 T2
- T2:做点什么
- T1:加入 T2
第 1 步和第 3 步是 Android 实时循环事件。但是因为在仪器测试中,一切都发生得非常快,我得到:
- T1:启动线程 T2
- T1:与 T2 连接(结果是无操作)
- T2:做点什么
当然我可以添加一些睡眠来获得所需的行为,但我想知道是否有更好的方法来做到这一点。 IE。有没有办法确保刚刚start ()-ed 的线程确实启动了,并且没有仍然坐在某个调度队列中等待启动。
(安迪男孩,我想念艾达基于集合的多任务处理)
然后回答垫子的问题:
if (this.thread != null && this.thread.isAlive ())
{
this.stop.set (true);
try
{
this.thread.join (1000);
}
catch (final InterruptedException Exception)
{
android.util.Log.w (Actor.TAG, "Thread did not want to join.", Exception);
} // try
} // if
正如我所说:no-op when 因为线程还没有开始。
【问题讨论】:
-
这没有意义
Thread.join()等待加入的线程终止(除非您设置了非常短的超时)。您确定错误不是其他错误吗? -
问题不在于单元测试的速度,而是线程调度的方式。
-
@Mat:我添加了一个代码示例来回答这个问题。
-
@Martin:你为什么要在那里测试
thread != null?你确定你输入的是if声明吗?您的第二个线程是否在开始处理之前检查stop.set(true)设置的任何内容? -
@Martin - 看看 - Awaitility .. 可能有用。
标签: java android multithreading