EMC actually has several modes:
During init we populate the EMC with the normal methods of the class and our additional methods. The problem of this mode is, that if an method invocation from another thread is done while EMC is in this mode, the current logic requires that method call to wait till init is done. That is the main reason for the synchronized blocks used in EMC.
The waiting requirement could be reduced in that we say creating a new EMC will right away init the EMC, then you will get back a ready initialized EMC instead of having to wait for the initialize call to finnish. But this is a bigger semantic change I think an we have to ensure this is no problem for Grails.
During modification we change EMC and during this modification all method invocations are blocked like in init. Actually this mode currently kind of uses a modified init mode.
I think we could here maybe work with some copy-on-write semantics to not to block other method calls during modification. Of course that again means a change of the multi threaded behaviour of this class and people depending on the blocking nature of the operation would possibly get a problem.
In that mode you can get method or execute them concurrently. The problem in this mode is the check we need for the init flag. The modified flag is no longer synchronized or volatile, so this is no problem anymore I would assume.
If it is possible to change modes 1+2 like I described, then we can remove the init flag completely, thus it cannot block anymore.
But... is that a too big change for 1.8?