如何为WaitForMultipleObjects windows API实现java等价物?

时间:2015-07-08 22:12:53

标签: java concurrency

我们需要一个可以反复清理的清理线程。将触发清理

  1. 在指定的时间段后或
  2. 指定事件后
  3. 在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会有帮助吗?

1 个答案:

答案 0 :(得分:0)

一种选择是使用BlockingQueuejava.util.concurrent包中提供了多个实现。

您的事件生产者可以将事件放入队列。

您的清理线程可以使用方法BlockingQueue.poll( long timeout, TimeUnit unit )轮询超时事件。