Changing the sync to only sync before lazy loading the actions.
The Actionable#getActions() method only needs to be synchronized when lazy loading. After that, the synchronization is superfluous and impacts performance.
Since the field is volatile, the double-check block works in JDK5+. See http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html for more in
Analyzing various thread dumps, many threads and requests stall on this method waiting for the lock. Since the lock isn't necessary in most cases anyway,
To make the previous change more effective, these synchronized keywords need to go as well.

This change is safe because (i) those actions are read-only and (ii) if they produce data that's bit old, that isn't really noticeable.