[ 
https://issues.apache.org/jira/browse/OGNL-20?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13098009#comment-13098009
 ] 

Julien Aymé commented on OGNL-20:
---------------------------------

@Maurizio:
Yes, putIfAbsent is a good idea !

@Simone,
you are not wrong, the two cases do have different semantics.

The thing is, we don't really care if some threads do the same computation at 
the same time.
What we really want is to speed up every thread in the long run (hence the 
caching) :
- 1. avoid computation twice for the same thread
- 2. ensure that any computed object is available for other threads : the use 
of ConcurrentHashMap allows exactly that
- 3. avoid blocking another thread which may not require the same object (if 
distinct key) : to do so, if we can avoid using any synchronized block or any 
lock it is better !


> 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


Reply via email to