public void shutdown() {
        synchronized (stopLock) {
            Logger.debug("Shutdown proxy for " + source);
            try {
                stopped = true;
                if (sourceReaderThread != null) {
                    sourceReaderThread.interrupt();
                }
                cache.close();
            } catch (ProxyCacheException e) {
                onError(e);
            }
        }
    }
Proxy for {@link Source} with caching support ({@link Cache}).
<p/>
Can be used only for sources with persistent data (that doesn't change with time).
Method {@link #read(byte[], long, int)} will be blocked while fetching data from source.
Useful for streaming something with caching e.g. streaming video/audio etc.
VideoCache/src/main/java/com/yc/videocache/ProxyCache.java