There is a static initialization race and deadlock that can occur between classes MeasureUnit and Currency.
The problem is that the static block for MeasureUnit instantiates instances of class Currency, and that Currency is a subclass of MeasureUnit. This scenario is a known Java thread safety problem if concurrent threads separately start to initialize the two classes.
This code reliably deadlocks for me, running against ICU 56:
A possible fix is attached. Still checking it out.