同步的Vs信号量

Add*_*ict 22 java semaphore monitor synchronized

在阅读Java中的并发性时,我有以下疑问:

  1. Java是否提供较低级别的构造然后同步以进行同步?

  2. 在什么情况下我们会使用信号量而不是synchronized(它在Java中提供监视器行为)

Mar*_*ana 42

Synchronized只允许一个执行线程同时访问资源.信号量允许最多n个(您可以选择n)执行线程同时访问资源.


Evg*_*eev 8

  1. 还有volatile关键字,根据http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html volatile变量访问比通过同步代码访问这些变量更有效

  2. java.util.concurrent.Semaphore用于限制可以访问资源的线程数.也就是说,虽然synchronized只允许一个线程获取锁并执行同步块/方法,但信号量允许最多n个线程去阻止其他线程.

  • 同步提供了解决线程干扰和内存一致性错误的解决方案,但是volatile只提供了解决内存一致性错误的解决方案,因此我们不能使用volatile在操作中提供原子性,我在这里遗漏了什么吗? (2认同)