【发布时间】:2016-10-04 22:46:21
【问题描述】:
有什么方法可以进行 Junit 测试以确保两个线程不会同时访问同步对象(在我的情况下是同步块中的 HashMap)?例如强制两个线程尝试访问并引发异常。 感谢您的帮助!
【问题讨论】:
-
这不是像测试 JVM 功能一样吗?如果是这样,它已经很好地测试了.. 否则,您可以创建一个可运行很长时间的可运行文件,并尝试访问您尝试测试的方法。运行此线程的两个实例以查看是否有任何冲突。如果锁定对象相同,则不会在同步块内发生。所以我觉得它就像测试不需要的JVM。
-
我被要求提供一个缓存的实现,它提供 - 缓存的单个实例、类型安全和线程安全以及对这些功能中的每一个进行测试。我正在使用哈希映射为单实例和泛型的缓存和单例设计模式建模以提供类型安全。在测试代码时,我无论如何都不需要测试线程安全功能并寻找一些方法来解决这个问题。谢谢!
-
出于缓存目的,使用
ConcurrentHashMap,如果允许的话..那么您不必担心线程安全。 -
那么有没有办法为线程安全提供单元测试呢?我为缓存实现了 put 和 get 方法,并委托给相应的 map 方法。当另一个线程尝试访问缓存而另一个线程对它有锁时是否会抛出异常,我可以进行测试。
-
线程安全内置于
ConcurrentHashMap,这是类的保证。你没有理由怀疑这一点,除非你觉得类实现或 java 库中存在错误。同步块场景也是如此。
标签: java multithreading junit hashmap synchronized