Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用静态锁存器或信号量可以吗?_Java_Multithreading_Semaphore_Countdownlatch - Fatal编程技术网

Java 使用静态锁存器或信号量可以吗?

Java 使用静态锁存器或信号量可以吗?,java,multithreading,semaphore,countdownlatch,Java,Multithreading,Semaphore,Countdownlatch,我有一些实现可运行接口的类。它们中的每一个都是通过单独的SingleThreadExecutor执行的。我不能修改执行例程,我只能为它提供不同的可运行程序 我需要根据其他Runnables结果对Runnables进行一些操作。也就是说,我只想在所有其他可运行程序都达到该执行点的情况下,在run()方法中运行一些操作。 或者,仅当执行相同操作的可运行程序数少于10时,我希望在run()方法中运行一些例程 我看到的唯一解决方案是创建一个静态变量CountDownLatch和信号量进行同步 我实现了这

我有一些实现可运行接口的类。它们中的每一个都是通过单独的SingleThreadExecutor执行的。我不能修改执行例程,我只能为它提供不同的可运行程序

我需要根据其他Runnables结果对Runnables进行一些操作。也就是说,我只想在所有其他可运行程序都达到该执行点的情况下,在run()方法中运行一些操作。 或者,仅当执行相同操作的可运行程序数少于10时,我希望在run()方法中运行一些例程

我看到的唯一解决方案是创建一个静态变量CountDownLatch和信号量进行同步

我实现了这一点,但由于一些未知的原因,如果一些可运行程序正在等待闩锁或信号量,那么从某个可运行的SingleThreadExecutor就不会使用next Runnable启动线程。例如,7个Runnable启动,其他则不启动


我的问题:我在静态锁存器或信号量上进行同步的方案正确吗?

在以下情况下,
循环载波器通常比
倒计时锁存器更有用:

  • 多线程操作分阶段或迭代进行,并且
  • 阶段/迭代之间需要单线程操作, 例如,组合上一个多线程的结果 部分

  • 更多信息。示例

    从理论上讲,您所做的工作是可行的——如果没有看到一些代码,很难说为什么不可行。