java - Java 中的互斥量和信号量

标签 java java-8 mutex semaphore

Java 中的互斥体和信号量是否非常有用,请记住还提供了同步实用程序?或者与 C++ 相比,它们只是为了完整性而提供的?我没有找到太多关于互斥体和信号量的报道。

最佳答案

在数据共享或任务同步的多线程应用程序中,完成此操作的最低级别对象是简单的锁或互斥锁。最重要的是,您可以构建更复杂的对象或算法,例如信号量。

多年来,Java 为许多最常见的多线程设计模式提供了对象和算法。看看java.util.concurrent包以获得完整列表。

同步,恕我直言,我认为它取代了不起眼的互斥体的大多数用例。并且它减少了正在处理的代码行数。但信号量仍然有用例。正如您在 java.util.conccurrent 包中所看到的,Semaphore 类是在 Java 1.5 中添加的。所以我认为,并且我认为 Java 的作者也认为,仍然需要 Semaphore 对象。但请看一下 java.util.concurrent 包中提供的各种类。只需通读它即可深入了解您之前可能不知道的常见多线程模式。使用更简洁的并发类来解决多线程问题,而不是使用较低级别的构造(如简单的互斥体或同步块(synchronized block))实现更复杂的代码,可能会导致更少的代码行和更优雅的解决方案。

关于java - Java 中的互斥量和信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31786858/

相关文章:

ios - 当有两个不同的地方发出信号和等待时如何使用条件

cron - 单个 Cron 实例/互斥体

java - jarsigner 无法在 java 中工作,因此构建失败

java - 当部署为 WAR 时,JRuby 中的线程安全 Resque Worker

java - 可选字段流返回值

java - 如何排除对象属性

java - 如何将 io.dropwizard.lifecycle.Managed 与 com.mongodb.MongoClient 一起使用?

java - 对象化查询过滤器,例如 "name contains"

java - 如何使用 Java 8 在 Spring boot 中获取目录(而不是文件)的完整系统路径

multithreading - timed_mutex 不会在 Cygwin 4.8.2 ('timed_mutex' 下编译,命名空间 'std' 没有命名类型)