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

时间:2011-10-03 20:53:36

标签: java multithreading concurrency jvm

考虑以下静态方法:

public void static foo() {
  // some heavy operation operating on a shared resource.
}

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

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

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

public void static synchronized foo() {
  // some heavy operation operating on a shared resource.
}

系统现在能够处理100个线程,所有线程都会对请求foo()进行锤击,因为一次只允许一个呼叫foo()

我希望限制对foo()的访问权限,以便只允许N个并发请求?在Java中实现这种限制的最简单方法是什么?

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:0)

CountDownLatch

可以解决您的问题。

它来自阻止和非阻塞。

修改:修复网址