Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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.util.concurrent.Semaphore.release()吗?_Java_Multithreading_Concurrency_Java.util.concurrent - Fatal编程技术网

可以在另一个线程上调用java.util.concurrent.Semaphore.release()吗?

可以在另一个线程上调用java.util.concurrent.Semaphore.release()吗?,java,multithreading,concurrency,java.util.concurrent,Java,Multithreading,Concurrency,Java.util.concurrent,我有一个java模块,它需要通过接口并发地执行一组任务(为实现该模块的框架提供低级控制和处理),但不能同时执行太多任务,java.util.concurrent.Semaphore似乎非常适合这样做 我不确定的一个问题是release()和acquire()调用的线程安全性。一个线程可以获取信号量锁,然后另一个线程释放它吗?这是 不要求释放许可证的线程必须具有 通过调用acquire()获取该许可证。正确使用 信号量是通过应用程序中的编程约定建立的 所以是的。你能行。是的,没有什么能阻止你这么做

我有一个java模块,它需要通过接口并发地执行一组任务(为实现该模块的框架提供低级控制和处理),但不能同时执行太多任务,
java.util.concurrent.Semaphore
似乎非常适合这样做

我不确定的一个问题是
release()
acquire()
调用的线程安全性。一个线程可以获取信号量锁,然后另一个线程释放它吗?

这是

不要求释放许可证的线程必须具有 通过调用acquire()获取该许可证。正确使用 信号量是通过应用程序中的编程约定建立的


所以是的。你能行。

是的,没有什么能阻止你这么做。这将是一个非常奇怪(即糟糕)的实现。您应该只发布您以前获得的内容。为什么不自己尝试一下呢?如果它不工作,java肯定会抱怨异常或错误Error@Michael-那是夸大其词。如果“释放”的责任没有从一个线程传递到另一个线程,OP的代码肯定会更简单、更容易推理。但是,如果1)不必要的复杂性或2)超出了正确实现传输的能力,那么这样做(显然)是不好的。这是一个计数,“许可”只是概念性的。伯爵是线程安全的。查看源代码并阅读API文档。@Shadowjonathan
acquire()有什么问题;回调();释放()