加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何防止Web服务API中的并发?

发布时间:2020-12-15 02:55:23 所属栏目:Java 来源:网络整理
导读:我们有三个Web服务(/ a,/ b,/ c),其中每个服务映射到一个单独的 Java类(ClassA,ClassB,ClassC)中的方法(go()). 只有一个服务应该同时运行(即:/ b在/ a运行时无法运行).但是,由于这是一个REST API,因此无法阻止客户端请求并发运行的服务. 服务器上最好和最简
我们有三个Web服务(/ a,/ b,/ c),其中每个服务映射到一个单独的 Java类(ClassA,ClassB,ClassC)中的方法(go()).

只有一个服务应该同时运行(即:/ 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()
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读