在Java中限制为最多N次并发调用静态方法

kno*_*orv 3 java concurrency multithreading jvm

请考虑以下静态方法:

public void static foo() {
  // some heavy operation operating on a shared resource.
}
Run Code Online (Sandbox Code Playgroud)

假设当并发呼叫数foo()超过十(10)时系统变得不稳定.

如果我在这种情况下启动了100个线程,所有线程都foo()在处理请求,那么应用程序将变得不稳定,因为我们超过了系统可以处理的并发请求数.

提高有限并发价格稳定性的一种方法是将代码更改为:

public void static synchronized foo() {
  // some heavy operation operating on a shared resource.
}
Run Code Online (Sandbox Code Playgroud)

系统现在能够处理100个线程,所有线程都可以处理foo()请求,因为一次只允许一个呼叫foo().

我想限制访问的场景如何foo()N允许并发请求?在Java中实现这种限制的最简单方法是什么?

JB *_*zet 10

使用Semaphore初始化的10个许可证.在方法开始时获取许可,并在方法结束时释放它(在finally块中).