[ https://issues.apache.org/jira/browse/OGNL-20?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13097998#comment-13097998 ]
Simone Tripodi edited comment on OGNL-20 at 9/6/11 1:30 PM: ------------------------------------------------------------ +1 to {{ReentrantReadWriteLocks}}. IMHO {code} Map _methodParameterTypesCache = new HashMap(); synchronized (_methodParameterTypesCache) { Class[] result; if ( ( result = (Class[]) _methodParameterTypesCache.get( m )) == null ) { _methodParameterTypesCache.put( m, result = m.getParameterTypes() ); } return result; } {code} and {code} Map _methodParameterTypesCache = new ConcurrentHashMap(); Class[] result; if ( ( result = (Class[]) _methodParameterTypesCache.get(m) ) == null ) { _methodParameterTypesCache.put( m, result = m.getParameterTypes() ); } return result; {code} have totally different semantics. In one case, you synchronized the whole block - including the checks - in the second one, just limited the map accesses. Am I wrong? If yes, why? was (Author: simone.tripodi): +1 to {{ReentrantReadWriteLocks}}. IMHO {code} Map _methodParameterTypesCache = new HashMap(); synchronized (_methodParameterTypesCache) { Class[] result; if ( ( result = (Class[]) _methodParameterTypesCache.get( m )) == null ) { _methodParameterTypesCache.put( m, result = m.getParameterTypes() ); } return result; } {code} and {code} Map _methodParameterTypesCache = new HashMap(); Class[] result; if ( ( result = (Class[]) _methodParameterTypesCache.get(m) ) == null ) { _methodParameterTypesCache.put( m, result = m.getParameterTypes() ); } return result; {code} have totally different semantics. In one case, you synchronized the whole block - including the checks - in the second one, just limited the map accesses. Am I wrong? If yes, why? > Performance - Replace synchronized blocks with ReentrantReadWriteLock > --------------------------------------------------------------------- > > Key: OGNL-20 > URL: https://issues.apache.org/jira/browse/OGNL-20 > Project: OGNL > Issue Type: Improvement > Environment: ALL > Reporter: Greg Lively > > I've noticed a lot of synchronized blocks of code in OGNL. For the most part, > these synchronized blocks are controlling access to HashMaps, etc. I believe > this could be done far better using ReentrantReadWriteLocks. > ReentrantReadWriteLock allows unlimited concurrent access, and single threads > only for writes. Perfect in an environment where the ratio of reads is far > higher than writes; which is typically the scenario for caching. Plus the > access control can be tuned for reads and writes; not just a big > synchronized{} wrapping a bunch of code. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira