java 防并发_java – 如何防止Web服务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()

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值