我有一些字段管理多个线程可能使用的信息。进入这些领域是至关重要的,所以我实例化一个信号:在Java中测试简单的信号量使用
Semaphore semaphore = new Semaphore(1);
每个方法都试图获取信号,实质上是在锁定如果没有可用的:
public void method()
{
semaphore.acquire();
doStruff();
cleanUp()
}
//Other methods using the same basic layout as the method above.
public void cleanUp()
{
//watch for state consistency and do some clean up
semaphore.release();
}
我怎么会去测试上述知道即:
- 我不想使用定时测试,使用
Thread.sleep(x)
由于该方法的固有问题,如对时钟的依赖和缺乏对该m的信任ethod。 - 我不能使用MultithreadedTC,至少不是我所知道的,因为一个线程将始终执行,因此节拍器不会前进到下一个节拍。
- 我不想修改现有的代码来添加位仅仅用于测试目的。代码应该避开测试中的附加内容。
- 我想要的东西可以运行多次,并用于回归测试。
- 因为我不是唯一使用代码的应用程序,它应该是Java本地代码,并且不使用ConAn等脚本语言。
这段代码足够小,我可以很确定地说,它不会死锁或上面详述的条件被违反。但是,一个好的测试案例可以增加它的权重,并且增加更多的信心。
只是一句话:在不同的功能中释放和释放信号量是在寻求麻烦。另外,我不明白为什么当你有一个'lock'的时候使用'semaphore',它更适合这个任务:它将处理优先级反转(如果你的JRE支持它)并且可以被两次同样的线程,如果需要的话。最后,我不明白如何在不添加特定代码的情况下测试关键部分(1)确保发生并发访问尝试(2)避免冲突后受保护数据仍处于一致状态。 –