java - 了解@service 和竞争条件

标签 java spring spring-mvc

我用 @service 注释一个类。我的@controller类将通过@autowired调用@service。任何人都可以在 @service 类、方法中预见到任何竞争条件?

如果我在@service中有方法

public boolean dosomethinglongtime(){
boolean passed=false;
//write to database...
//do very long task;
//if all task success, passed=true;

return passsed
} 

两个不同的用户调用 Controller 并调用此方法是否有可能导致 dosomethinglongtime() 内传递的 boolean 值出现竞争条件?

好吧,这只是一个疑问,到目前为止还没有发生竞争条件,我只是想澄清这个疑问。谢谢你

最佳答案

不,该代码中不会出现任何竞争条件(从 Java 的角度来看),因为 boolean 值的范围仅限于方法调用。如果 boolean 值是实例或类属性,那么您可能会遇到并发问题。理想情况下,您的服务应该是无状态的,以避免竞争条件,如果不是,您需要使类同步或使用concurrent package中的深奥内容。 .

如果你想阻止2个用户在数据库中写入/更新相同的记录,你需要使用锁定机制,例如optimistic locking ,或pessimistic locking 。这些链接指向 hibernate 文档,但大多数 ORM 支持这两种锁定机制。

关于java - 了解@service 和竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5232260/

相关文章:

java - 如何更改netbeans平台的默认字体?

当 topRequest 和转发请求的参数名称相同时,Spring MVC 转发附加请求参数值以逗号分隔

java - Canvas 上的透视图

java - 速度模板自动重新加载不起作用

java - 在子线程中访问 HttpServletRequest 请求

Spring jdbc : simplejdbcall doesn't read metadata for parameters when executing stored procedure using synonym

java - Hibernate 标准 addOrder 弄乱了结果

java - 在 SQL 准备语句中放入 javascript 变量 (java)

java - 将 jar 文件从 Windows 7 复制到 Unix 会出现 java.util.zip.ZipException

java - 如何管理 jar 文件之间的依赖关系?