SECURITY-418 has comments on how the re-entrant lock is creating performance issues. The evaluate method lock should be configurable - reentrant or rewrite or be lockfree.
System property picketbox.xacml.pdp.lockstrategy should be set to
"lockfree" to disable locking or "readwrite" for ReadWriteLock.
The readwrite lock doesn't affect the performance here since the write lock is held for the entire evaludate() method. It acts a mutual exclusion lock. The write lock should be held right when we want to update the decision caches: