【问题标题】:Maven Thread Safe Plugin PitfallsMaven 线程安全插件陷阱
【发布时间】:2014-03-02 21:10:43
【问题描述】:

我正在构建我的第一个 maven 插件,目标是 maven 3。我试图了解实例化策略如何影响线程安全。如果我保留默认的“每次查找”策略,那意味着什么?对我来说,这意味着插件的每次执行都会实例化一个新的 mojo,因此几乎不可能编写一个非线程安全的插件。

如果我选择“单例”策略,我可以看到线程安全问题会如何出现,因为同一 mojo 可能在不同线程中同时使用,从而导致通常的线程安全问题(即类级别变量)发挥作用。

总之,每次查找的实例化策略是否像我想的那样工作?确保 maven 3 插件实际上是线程安全的(而不仅仅是在 @Mojo 注释中标记为线程安全的)有哪些一般的经验法则/指南?

【问题讨论】:

    标签: maven maven-3 maven-plugin


    【解决方案1】:

    你是对的,per-lookup 表示每次从 plexus 查找都会创建一个新实例。每次执行都会导致一次查找,所以是的,每次执行都会创建一个新实例。

    因此,这是防止多线程问题的最安全方法。

    但是,您仍然可以通过使用非最终静态字段来创建多线程问题。

    所以,使用per-lookup,不要使用静态变量,你是安全的。

    【讨论】:

    • 啊,我没有考虑静态变量。如果可能的话,我会避开它们(当然,除非它们是最终的)。谢谢!
    • 作为记录,如果每个实例都工作并在同一个文件夹中创建/删除文件,您仍然可能会遇到问题,尽管代码中没有任何“静态”。文件系统有点“静态”,我刚刚遇到了这个问题!
    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多