当前位置: 首页 > 面试题库 >

如何防止Web Service API中的并发?

庞旺
2023-03-14
问题内容

我们有三个Web服务(/a/b/c),其中每个服务映射到一个方法(go()在一个单独的Java类)(
ClassA,)。ClassB``ClassC

只能同时运行一项服务(即:/b无法在运行时/a运行)。但是,由于这是REST API,因此无法阻止客户端请求并发运行的服务。

在服务器上 强制 服务 不能 同时运行的最佳和最简单的方法是什么?

更新 :这是一个内部应用程序,我们的负载不会很大,只有一台应用程序服务器。

更新 :这是一个主观的问题,因为您可以在通用应用程序设计中提出不同的论点,从而影响最终答案。我发现这最有趣,最有帮助,因此接受了超思考的答案。


问题答案:

假设仅强制Web服务器仅具有一个侦听线程来处理请求是不行的……我想我只是使用一个静态锁(为了清楚起见,ReentrantLock可能是正确的,尽管您实际上可以在任何共享库上同步):

public class Global {
  public static final Lock webLock = new ReentrantLock();
}

public class ClassA {
    public void go() {
        Global.webLock.lock()
        try {
            // do A stuff
        } finally {
            Global.webLock.unlock()
        }
    }
}

public class ClassB {
    public void go() {
        Global.webLock.lock()
        try {
            // do B stuff
        } finally {
            Global.webLock.unlock()
        }
    }
}

public class ClassC {
    public void go() {
        Global.webLock.lock()
        try {
            // do C stuff
        } finally {
            Global.webLock.unlock()
        }
    }
}


 类似资料:
  • 本文向大家介绍MongoDB中如何做到更新并防止覆盖,包括了MongoDB中如何做到更新并防止覆盖的使用技巧和注意事项,需要的朋友参考一下 让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是要更新的查询- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出-

  • 我在Jenkins的Build Executor Status面板中单击了一个作业名称旁边的[x]按钮,中止了该作业,但该作业仍然存在并等待。 即使我重新启动Jenkins它也会恢复构建。当我看一下控制台时,我看到: 向进程发送中断信号单击此处强制终止运行步骤。伊奥。IOException:正在中止sun的构建。反映国家建筑配件公司。sun的newInstance0(本机方法)。反映国家建筑配件公

  • 问题内容: 我认为这是一个普遍的问题,不需要从我的图表中获取太多信息。 我想防止列彼此重叠/重叠,该怎么办? 请参阅下面的图像链接,了解现在的情况 http://highslide.com/forum/download/file.php?id=3157 jsfiddle:http : //jsfiddle.net/Dzs5q/ 问题答案: 请尝试在此处重现该错误@ http://jsfiddle.

  • 问题内容: 使用不同的Java库执行数百万个HTTP请求,使我陷入困境: 这是功能。 我试图设置Apche Http Client,并在所有可能的超时(我希望)上超时,但仍然 (可能无限)挂起。如何摆脱它们? 挂断率大约是每10000个请求〜1(对10000个不同的主机),并且可能会永远持续下去(我已确认线程挂起在10小时后仍然有效)。 Windows 7上的JDK 1.8。 我的工厂: 我的工厂

  • 问题内容: 是否可以防止两个或多个用户同时修改同一数据库条目? 向用户显示错误消息以执行第二次提交/保存操作是可以接受的,但是数据不应被静默覆盖。 我认为锁定条目不是一种选择,因为用户可能会使用“后退”按钮或只是关闭浏览器,从而永远保持锁定状态。 问题答案: 这就是我在Django中进行乐观锁定的方式: 上面列出的代码可以作为Custom Manager中的方法实现。 我做出以下假设: filte

  • 问题内容: 考虑以下HTML: 和以下CSS: 就目前情况而言,Firefox目前与以下内容类似: 注意,第四项在第二和第三列之间分配。我该如何预防? 所需的渲染可能更像: 要么 编辑: 仅指定宽度以演示不需要的渲染。在实际情况下,当然没有固定的宽度。 问题答案: 正确的方法是使用闯入式CSS属性: 不幸的是,截至2019年10月,Firefox不支持此功能,但其他所有主流浏览器均支持此功能。使用