public class AutoPullExecutor<K, E> extends Thread {
private static final String TAG = "AutoPullExecutor";
private final FilterCache<K, E> mCache;
private final List<FilterCacheHelper.OnPullCacheCallback<K, E>> mCallbacks;
private boolean mIsRunning = false;
public AutoPullExecutor(FilterCache<K, E> cache) {
mCache = cache;
mCallbacks = new ArrayList<>();
}
@Override
public void run() {
Log.d(TAG, "AutoPullExecutor is start");
mIsRunning = true;
while (mIsRunning) {
FilterCache.Node<K, E> node = mCache.poll();
if (node == null) {
continue;
}
autoPullCallback(node);
}
}
private void autoPullCallback(FilterCache.Node<K, E> node) {
for (FilterCacheHelper.OnPullCacheCallback<K, E> callback : mCallbacks) {
callback.onCache(node.key, node.element);
}
}
void addPullCallback(FilterCacheHelper.OnPullCacheCallback<K, E> callback) {
mCallbacks.add(callback);
}
boolean isRunning() {
return mIsRunning;
}
void exit() {
mIsRunning = false;
interrupt();
clear();
}
void clear() {
mCallbacks.clear();
}
}