我实现了一个类,该类充当对象的缓存。它具有一个DelayQueue用于从缓存中删除对象。
class mySingletonClass {
ConcurrentHashMap map<String,MyObject>();
DelayQueue queue <MyObject>();
boolean alreadySeen(MyObject myObject) {
MyObject obj = map.putIfAbsent(myObject.getID(),myObject);
if(obj != null) return true;
queue.add(myObject);
return false;
}
它对于单线程工作正常。我正在尝试同时测试多个线程。我试图推断这种方法是否是线程安全的,但我不确定。我已经尝试了静态分析器FindBugs插件。我不确定如何对此进行单元测试。我从未使用过java.util.concurrent,也从未使用过线程,因此我试图相对较快地学习它。
我对单元测试的想法是创建一个AtomicInteger并运行多个线程以尝试将同一对象添加到地图。如果该方法返回true,则增加整数。如果成功,此整数应等于1。 当我进行第二次测试时,我与AtomicInteger类似地尝试将其设为10?个线程,每个线程添加5个唯一对象的列表,并确保完成所有线程后的总数为5。
我一直在与Executors玩耍并创建Runnable方法,但我收到了NullPointerExceptions,我不确定自己在做什么。
我正在寻找:
此方法线程安全吗?如果不是,是否有办法使其线程安全(不仅仅是使方法同步)?
如何在junit4中实现具有多个线程的两个单元测试?