I am wondering why you be so verbose in Java 8's code. The main reason for ThreadLocal.withInitial() is to use it like that:
private static final ThreadLocal<Integer> CALL_DEPTH = ThreadLocal.withInitial(() -> 0);
Using a Supplier without a lambda is not the intention behind this method /API
In Java 7, you can use the code like this fix comitted. If you want it verbose in Java 8, I would also use the Java 7 code...