I used a concurrent skip list map to have a thread-safe ordered map. I used a map instead of a queue so I can easily look up and remove items. This is useful when a task completes and I need to find the correct entry in running tasks and remove it.