2015-04-07 82 views
1

的Java多线程的概念我创建了一个信号灯在信号灯

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) 

Q3:如果我打电话release(),而不调用aquire(),会发生什么许可证的数量,这是否增加比我们所拥有的声明?

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

感谢任何帮助。

回答

1

如果您的Semaphore以单个许可证开始并且单个线程试图获取多于1个许可证,那么该线程将被阻止。假设没有其他线程会调用必要的编号release,那么该线程将被无限期地阻塞。

boolean参数的overloaded constructor表示

如果此信号量将保证第一下争 允许先出准许,否则为假

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

+0

感谢您的回复,有多个线程共享'Semaphore'对象 –

+3

@SashiKant您在构造函数中指定的许可证数量仅为初始数量,而非限制。 –

+0

最多为1您的评论,但我仍然感到困惑与***问题2和3 *** –

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". 

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

当信号量是而不是是公平的,那么它可以通过一种算法来实现,该算法与某些计算机体系结构上的公平算法相比可能具有更高的性能。

+0

感谢您的输入,希望有一个选项可以选择多个正确的答案,而不是选择一个:) –