Java 信号量中的多线程概念
Java multithreading concepts in Semaphores
我创建了一个信号量
Semaphore semaphore = new Semaphore(1);
我们重载了 aquire 方法,例如:
aquire()
aquire(int)
Q1 :对于目前只有1个permit的semaphore,第二种方法(aquire(int)
)有什么意义吗?
Q2:我对
还是有点迷惑
new Semaphore(int)
new Semaphore(int,true)
new Semaphore(int, false)
问题 3: 如果我调用 release()
,而不调用 aquire()
,许可数量会发生什么变化,是否比我们声明的增加?
注意:有多个线程共享 Semaphore
对象。
感谢任何帮助。
如果您的 Semaphore
以单个许可开始并且单个线程试图获取超过 1 个许可,则该线程将阻塞。假设没有其他线程会调用必要数量的 release
,那么该线程将被无限期地阻塞。
overloaded constructor 的 boolean
参数表示
if this semaphore will guarantee first-in first-out granting of
permits under contention, else false
您在构造函数中指定的许可数量只是初始数量,不是限制。
Q2: I am still a bit confused with
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" 表示当有多个线程被阻塞等待获取许可时,等待的线程将按照严格的先到先得顺序到达 运行。第一个被阻塞的线程将是第一个到 运行 的线程,依此类推。
当信号量不公平时,它可能会通过一种算法来实现,与某些计算机体系结构上的公平算法相比,它可能会提供更高的性能。
我创建了一个信号量
Semaphore semaphore = new Semaphore(1);
我们重载了 aquire 方法,例如:
aquire()
aquire(int)
Q1 :对于目前只有1个permit的semaphore,第二种方法(aquire(int)
)有什么意义吗?
Q2:我对
还是有点迷惑new Semaphore(int)
new Semaphore(int,true)
new Semaphore(int, false)
问题 3: 如果我调用 release()
,而不调用 aquire()
,许可数量会发生什么变化,是否比我们声明的增加?
注意:有多个线程共享 Semaphore
对象。
感谢任何帮助。
如果您的 Semaphore
以单个许可开始并且单个线程试图获取超过 1 个许可,则该线程将阻塞。假设没有其他线程会调用必要数量的 release
,那么该线程将被无限期地阻塞。
overloaded constructor 的 boolean
参数表示
if this semaphore will guarantee first-in first-out granting of permits under contention, else false
您在构造函数中指定的许可数量只是初始数量,不是限制。
Q2: I am still a bit confused with
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" 表示当有多个线程被阻塞等待获取许可时,等待的线程将按照严格的先到先得顺序到达 运行。第一个被阻塞的线程将是第一个到 运行 的线程,依此类推。
当信号量不公平时,它可能会通过一种算法来实现,与某些计算机体系结构上的公平算法相比,它可能会提供更高的性能。