最近我正在编写一段涉及同步的代码,并在如何测试它方面苦苦挣扎。为了解决这个问题,我们可以考虑为CountDownLatch
编写一个单元测试:
CountDownLatch l = new CountDownLatch(1);
new Thread() {
@Override
void run() {
l.await();
System.out.println("good!");
}
}.start();
Thread.sleep(1000); // wait for thread to run
if (the thread is alive)
l.countDown();
else
System.out.println("bad!");
所以问题是,不能保证在所有机器的所有情况下{1}都足够1秒。所以我的目标是消除这种类型的睡眠代码,以便在测试同步时期望某种状态,但很快就意识到它开始变成暂停问题。
我目前的解决方案是查询线程的状态:
sleep
我的问题是:
答案 0 :(得分:0)
看看你的例子,我感觉你正在倒计时使用倒计时闩锁。为什么你不能做那样的事情:
@Test
public void testThreads() throws Exception {
CountDownLatch l = new CountDownLatch(1);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Parallel thread is doing something.");
try {
// instead of this sleep you put your logic that you want to be executed.
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
l.countDown();
}
}).start();
System.out.println("Main thread is waiting for parallel thread");
l.await();
System.out.println("Done.");
}
如果我误解了你的问题,请纠正我。
但总的来说,我同意你的帖子下面的一条评论,你可能不应该用单元测试测试多线程。