计算我们请求的活动数量而不会阻塞

时间:2011-04-07 23:44:37

标签: multithreading concurrency

在java网络服务器上,我想知道是否有任何有效的网络请求。

我的第一个想法是:

    public static AtomicInteger count = new AtomicInteger();

    public void processRequest() {
        count.incrementAndGet();
        // process my request
        count.decrementAndGet();
    }

    public boolean areThereActiveRequests() {
        return 0 == count.get();
    }

这显然会使Web请求阻塞(尽管很快),在递增或递减时等待对count()的锁定 - 这是我们不希望高度可扩展的服务器。

请注意,任何代码调用都可能存在同步问题.ThereActiveRequests - 它返回的值可能在返回时失效 - 但这对我来说是可行的。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的网络请求不会阻止对方等待锁定,因为AutomicInteger不需要任何锁定并利用硬件同步原语。

Check this for details

因此,您当前的代码看起来很适合您要解决的问题。