【问题标题】:Do I need to worry about concurrency with tomcat spring beans?我是否需要担心与 tomcat spring beans 的并发性?
【发布时间】:2010-10-15 22:25:57
【问题描述】:

对 java 的了解不够,在单服务器 tomcat 应用程序中列出和更改 spring java bean 中的 DTO 对象时是否需要担心并发问题?

【问题讨论】:

    标签: java spring concurrency javabeans


    【解决方案1】:

    简而言之,是的。 Spring Beans 通常可以被多个线程共享。请特别注意 Spring Bean 中的成员变量。如果它们是可变的,要么使它们不可变,要么通过锁(例如同步)、ThreadLocal 等来协调访问。

    【讨论】:

    • 您是说如果我的 bean 正在支持一个页面并且该页面被打开两次,那么 bean 是在页面之间共享的,还是为每个页面会话创建一个新的 bean?等我回去工作,我得试验一下
    • 从广义上讲,您需要推理您的 bean 是否共享以及如何共享。我意识到这有时说起来容易做起来难。
    【解决方案2】:

    这是您需要问自己的问题。有没有办法让两个线程访问 same DTO?我想在任何健全的架构中都没有。

    Spring bean 本身通常是单例的(如果没有进行其他配置),应该是线程安全的。

    如果所有 bean 都接收 DTO 作为参数,返回新创建的 DTO,并且这些 bean 的所有客户端都不会保留引用,那么 DTO 应该不是问题。至少从高层次的角度来看。

    但是,您应该阅读有关 java 并发的内容。如果有机会,我会推荐Goetz's book

    最后,我记得 Rod Johnson(springsource 的策划者)说 DTO 是邪恶的。请花一些时间在 Google 上搜索“DTO evil”并做出决定。

    【讨论】:

    • 我认为 DTO 也很烦人,但它是为我选择的。
    • 这个 SO 问题已经是谷歌上“DTO evil”的第二个结果(至少对我而言)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多