2012-09-06 68 views
0

我有一些實現Runnable接口的類。它們中的每一個都是通過單獨的SingleThreadExecutor執行的。我無法修改執行例程,我只能爲它提供不同的Runnable。可以使用靜態閂鎖或信號量嗎?

我需要根據其他Runnables結果對Runnables進行一些操作。即我只想在run()方法內部運行一些操作,以防其他所有Runnable都到達該執行點。 或者說,我要運行一些日常運行(內部)方法只有當正在做同樣的Runnable的數量少於10

我看到的唯一的解決辦法是讓一個靜態變量CountDownLatch和信號量同步。

我實現了這個,但由於某些未知的原因,從某些Runnable SingleThreadExecutor開始,如果某些Runnables正在等待Latch或Semaphore,那麼它將不會啓動具有下一個Runnable的線程。例如7個Runnables啓動,其他則不啓動。

我的問題:我的靜態鎖存器或信號量同步方案是否正確?

+0

從理論上講,你的工作可以起作用 - 很難說爲什麼它沒有看到一些代碼。 – assylias

回答

0

CyclicBarrier通常比在箱子CountDownLatch更加有用:

  1. 多線程操作,階段或迭代中,併發生;
  2. 例如,在階段/迭代之間需要單線程操作,以合併先前多線程的部分的結果 。

更多信息Here。示例Here

相關問題