基于以下答案:我仍然不清楚: concurrentMap 上的同步构造有什么作用,如果有的话。即在并发映射的情况下,同步(映射)与非同步之间有什么区别。我对解决方案的正确性或相信的优点不感兴趣。只是对这个问题的回答: 问:在 concurrentmap 上同步和不同步有什么区别?特别是关于性能..就足够了。请不要再说什么了。
我只对发生的事情感兴趣,没有补充建议。
我有一个理论问题,我正在解决一些心理问题:假设我有一个并发集合类 say=>ConcurrentHashMap 映射;
假设我有三种方法:
method1: synchronized(map){
doSomethingWithThemap(); //Assume put integers 1.. 1000000
}
method2:doSomethingWithThemap(); //Note it is not synchronized
method3:doSomethingElseWithThemap(); //Assume put integers 2000000.. 3000000
现在假设 2 个测试用例:
- TestCase1:产生两个线程A和B。A调用method1,B调用method3。
- TestCase2:产生两个线程 A' 和 B'。A'调用method2,B'调用method3。
从性能的角度来看,我希望 TestCase2 获胜,因为据我了解,在 TestCase1 中,B 无法添加到地图中,尽管是并发的,因为同步块将持有地图上的锁,而在测试用例 2。
我的单元测试不验证这个假设。
问:我在这里缺少什么。即给定并发集合上的同步块是否会影响性能?