信号量中的Java多线程概念

时间:2015-04-07 03:43:15

标签: java multithreading semaphore

我创建了信号量

Semaphore semaphore =  new Semaphore(1);

我们已经超载了 aquire 等方法:

aquire()
aquire(int)

Q1:对于只有1个许可证的当前信号量,第二种方法(aquire(int))是否有任何意义?

Q2:我仍然对

感到困惑
new Semaphore(int)
new Semaphore(int,true)
new Semaphore(int, false)

问题3:如果我致电release(),而不致电aquire(),许可证数量会发生什么变化,是否会增加我们宣布的数量?

注意:有多个线程共享Semaphore对象。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

如果Semaphore以单个许可开始,并且单个线程尝试获取超过1个许可,则该线程将阻止。假设没有其他线程会调用必要数量的release,那么该线程将被无限期阻塞。

overloaded constructorboolean参数表示

  

如果此信号量将保证先进先出授权   争用的许可证,否则为假

您在构造函数中指定的许可数量只是初始数量,而不是限制。

答案 1 :(得分:1)

  

Q2:我仍然对

感到困惑
new Semaphore(int)          //same as new Semaphore(i, false);
new Semaphore(int,true)     //the Semaphore will be "fair".
new Semaphore(int, false)   //the semaphore will not be "fair".

布尔标志控制信号量是否为 fair 。 "一般"意味着当多个线程被阻塞等待获取许可时,等待的线程将以严格的先来先服务顺序运行。要阻止的第一个线程将是第一个要运行的线程,依此类推。

当信号量公平时,它可以通过一种算法来实现,与某些计算机体系结构上的公平算法相比,该算法可能提供更高的性能。