如果可能的话,我想在java中做以下想法:
我有一个拥有超过1000行代码的同步方法,需要很长时间才能完成。 许多用户同时请求相同的方法,因此性能非常糟糕。
我在想的是我想在同步中同时为一定数量的用户打开此方法(比方说5),而不是一次打开1个用户。 这在java中可行吗? 为了做到这一点,我必须知道什么技术?
答案 0 :(得分:4)
您可以使用信号量,如下所示: -
// 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()限制访问,如果你不希望线程等到它获得许可,或者你可以调用sp.acquire()使线程等待已经5其他线程已获得许可。调用release()会释放许可,以便新线程能够访问您的方法