我们需要一个可以反复清理的清理线程。将触发清理
在Windows中我们有:
DWORD WINAPI WaitForMultipleObjects(
_In_ DWORD nCount,
_In_ const HANDLE *lpHandles,
_In_ BOOL bWaitAll,
_In_ DWORD dwMilliseconds
);
...将等待指定时间的特定事件。当发生任何指定事件或发生超时时,将释放等待。
我们在Java中有类似的实现吗?我尝试了CountDownLatch和CyclicBarrier。 CountDownLatch无法再次重置,因此无法使用它,而CyclicBarrier对线程数有一定的依赖性。寻找比CyclicBarrier更好的东西。 Timer和TimerTask会有帮助吗?
答案 0 :(得分:0)
一种选择是使用BlockingQueue
。 java.util.concurrent
包中提供了多个实现。
您的事件生产者可以将事件放入队列。
您的清理线程可以使用方法BlockingQueue.poll( long timeout, TimeUnit unit )
轮询超时事件。