我正在创建一个用Java编写并托管在JBoss AS上的Web服务。我不是网络服务设计方面的专业人士,但我是否正确使用并且每次调用该服务都会启动一个新的线程,而不是一个新进程?在我的服务中使用同步方法是否有意义?我需要一个方法,一次只能为一个用户调用,而不是同时为多个用户调用。
答案 0 :(得分:2)
是的,请求由各个处理程序线程处理。所有JBoss都有一个进程。
如果您的应用程序最终在群集中的多个节点上进行托管,则同步可能会有问题。没有像Terracotta这样的魔法的帮助,锁不会传播到多个JVM。对于简单的解决方案,您可以在数据库中使用悲观的行锁来控制访问。当然,人们倾向于挑战需要阻塞方法的整个设计,并寻找可以并行运行的替代方案。
此外,如果您要使用该路由,则java.util.concurrent包中的锁定优先于synchronized关键字。