如何在单个Restfull Web服务端点上处理多个请求

时间:2019-07-11 04:29:09

标签: web-services grails

我已经使用grails Web框架开发了Web应用程序,并且正在为我的电子商务平台开发此应用程序,在该平台上向诸如“ Flash Sale”之类的用户提供报价。

我已经在预订产品的我的控制器之一中成功为此创建了api。这里的逻辑是If that product is completely sold and is not available i.e in other words if i have 0 products remaining then i shouldn't book the product and should tell the booking user about this, for this am returning status code as 204

在这里困扰我的是What if many customers starts booking the product exactly at the same time altogether. Scenario lets say i have only 20 pieces of product to be sold and 21 customers started booking the product at the same time。为此,我将一一锁定(排队)api请求。尚不知道如何执行此操作,请帮帮我。

1 个答案:

答案 0 :(得分:0)

您是否曾经在Java中使用过synchronized关键字?它用于形成线程队列,其中线程将形成一行以访问特定代码。为了确定线程是否应该等待,请将对象实例传递给同步块,如果在同一实例上已经存在使用同一块的另一个线程,它将等待直到所有先前的线程完成。本文介绍了同步的用法:https://www.geeksforgeeks.org/synchronized-in-java/

此外,这是我的意思的示例。我将只使用一个静态对象实例,这意味着所有线程都将使用相同的对象实例,这将使它们全部轮流等待:

static Object threadLock = new Object();

void doSomething() {
    // region Some code that all threads can execute at once
    ...
    // endregion

    // region Synchronized code
    synchronized(threadLock) {
        // Have your winner logic here. Threads will only go into this block in a first-come-first-served basis.
    }
    // endregion
}

为简单起见,您也可以将整个方法标记为已同步,但是当不需要时,必须以同步方式完成方法中的所有逻辑。您可以自行决定使用哪种方法。