【发布时间】:2011-05-05 22:39:32
【问题描述】:
我正在创建一个用 Java 编写并托管在 JBoss AS 上的 Web 服务。我还不是网络服务设计方面的专业人士,但我是否正确理解了它,并且每次调用服务都会启动一个新的线程,而不是一个新的进程?在我的服务中使用同步方法是否有意义?我需要一个方法,一次只为一个用户调用,而不是同时为多个用户调用。
【问题讨论】:
标签: java web-services jboss synchronized
我正在创建一个用 Java 编写并托管在 JBoss AS 上的 Web 服务。我还不是网络服务设计方面的专业人士,但我是否正确理解了它,并且每次调用服务都会启动一个新的线程,而不是一个新的进程?在我的服务中使用同步方法是否有意义?我需要一个方法,一次只为一个用户调用,而不是同时为多个用户调用。
【问题讨论】:
标签: java web-services jboss synchronized
是的,请求由单独的处理程序线程处理。所有 JBoss 都有一个进程。
如果您的应用程序最终跨集群中的多个节点托管,则同步可能会出现问题。没有像 Terracotta 这样的魔法帮助,锁不会在多个 JVM 之间传播。对于一个简单的解决方案,您可以在数据库中使用悲观行锁来控制访问。人们当然会倾向于挑战需要阻塞方法的整个设计并寻找可以并行运行的替代方案。
此外,如果您要走这条路,则首选 java.util.concurrent 包中的锁而不是 synchronized 关键字。
【讨论】: