如果可能的话,我想在java中实现以下想法:
我有一个同步方法,有超过 1000 行代码,并且需要很长时间才能完成。 许多用户同时请求同一个方法,因此性能非常糟糕。
我的想法是,我想同时为一定数量的用户(比如说 5 个)打开此方法,而不是在同步中一次为 1 个用户打开此方法。 这在java中可行吗? 我必须了解哪些技术才能做到这一点?
最佳答案
您可以使用信号量,如下所示:-
// Grant access to only 5 permits
Semaphore sp = new Semaphore(5);
public void myMethod() {
sp.acquire();
//...
sp.release();
}
Sempahore 为您提供了通过在其构造函数中指定许可数量来控制可以执行您的方法的线程数量的功能。由于您不希望同时执行超过 5 个线程,因此可以在 Semaphore 的构造函数中指定 5。现在,当不同的线程调用 myMethod 时,如果您不希望线程等待直到获得许可,则可以使用 sp.tryAcquire() 来限制访问,或者如果已经有 5 个其他线程,则可以调用 sp.acquire() 使线程等待线程已获得许可。调用release()会释放新线程能够访问您的方法的许可
关于java - java中允许特定数量的用户访问某个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25831964/