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



我使用grails Web框架开发了Web应用程序,并且正在为我的电子商务平台开发它,该平台为用户提供"闪购"等优惠。

我已经在我的一个控制器中成功为此创建了 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 请求(排队(。我不知道该怎么做,请帮助我。

你有没有在 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
}

为了简单起见,还可以将整个方法标记为同步,但是当可能不需要时,该方法中的所有逻辑都必须以同步方式完成。自行决定使用任一方法。

相关内容

  • 没有找到相关文章

最新更新