2012-10-12 240 views
1

java中的Synchronized关键字取决于互斥锁还是信号量?我读到这两个术语可以互换使用,但是有区别吗? java中有没有内建信号量类?JAVA中的互斥量和信号量?

+1

互斥体来自互斥 - 唯一的线程访问代码块,而信号量允许多个线程执行代码。有时允许多个线程输入代码块会很有用。 java.util.concurrent.Semaphore - 信号量,synchronized更接近互斥量。 – user486075

+0

'synchronized'取决于一个对象或类,它充当互斥体。有什么内置什么...? – nullpotent

+0

@ user486075它来自互斥。 – nullpotent

回答

1

一个mutexsemaphore之间的主要区别在于,mutex可由进程/线程,其保持它在对比的是可以通过任何进程/线程被释放semaphore仅释放。还有一个区别,但不是那么重要:有一种叫做计数信号量的信号量,即可以初始化以允许多个并发“持有者”的信号量。

​​在语义上的访问应该使用mutex实现。

0

旗语一个封装具有在运行的一个块释放,它可以被获取许可证/固定数量的码。所以等于许可证数量的固定数量的线程可以同时运行代码块。互斥/锁是信号量的专用版本,其中许可数量为1.只允许单个线程运行某个代码块。这给了代码块的线程“所有权”。只有所有者才能获取并释放代码块上的锁定。