I believe the established approach for having default values in `ThreadLocal`s is by creating an anonymous subclass (see [here](http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html)). I.e., in the declaration of `executableOracles`, put

```java
ThreadLocal<ReuseCapableOracle<S,I,O>> executableOracles = new ThreadLocal<ReuseCapableOracle<S,I,O>>() {
   @Override
   protected ReuseCapableOracle<S,I,O> initialValue() {
     return ReuseOracle.this.factory.createOracle(); // or ReuseOracle.this.supplier.get()
   }
};
```