The LockFreeQueue<> utility class has some limitations. There are cases where concurrent operations may interfere with each other in ways that prevent progress by one thread if another thread is stalled. That was acceptable in the original context where this class was developed (an implementation detail in G1DirtyCardQueue). But it's a problem now that it's a general utility. To mitigate this, the pop API was made more complex. But we should try to do better.