Here are two forms to work with generics extending base type:
public abstract <T extends Runnable> BlockingQueue<T> getQueueA();
public abstract BlockingQueue<? extends Runnable> getQueueB();
I don't understand. What is the difference? Both methods seem to return the same BlockingQueue of objects that extend Runnable.