class TimedRepository implements Runnable {

    public void begin( KEY key ) throws ConcurrentAccessException
    {
        VALUE instance = factory.newInstance();
        Entry existing;
        if ( (existing = repo.putIfAbsent( key, new Entry( instance ) )) != null )
        {
            reaper.accept( instance ); // Need to clear up our optimistically allocated value
            throw new ConcurrentAccessException( String.format(
                    "Cannot begin '%s', because %s with that key already exists.", key, existing ) );
        }
    }

    public  TimedRepository( Factory<VALUE> provider, Consumer<VALUE> reaper, long timeout, Clock clock );

}