java - java中允许特定数量的用户访问某个方法

标签 java multithreading synchronization deadlock

如果可能的话,我想在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/

相关文章:

java - Java 如何管理对数组元素的多线程访问?

java - 为什么使用replace方法需要重新定义一个String?

java - 测试方法是否以同步方式运行

java - Spring 安全: Advice needed on how to handle GrantedAuthority

c# - 十次 Thread.Sleep(100) 还是一次 Thread.Sleep(1000)?

Java Async Sockets 多线程性能

Java 银行帐户同步示例。无法看到解决方案如何工作

java - TreeMap.higherEntry 返回意外的 null

c# - 尝试理解 Thread.MemoryBarrier() 和上下文切换之间的关系

android - 等待另一项 Activity 的结果