Slightly improved patch.
At TimeLimited.put() the internal map has been accessed twice. This prevented some construction of QueueItem instances and therefore reduced garbage collection. While this was good idea when put method has been synchronized it could have produced unpredictable results without the synchronization. At least its difficult to understand what may happen.
This change also allowed some other improvements to QueueItemand tick() method.
What's your opinion on these changes?