Maven线程安全插件陷阱

时间:2014-03-02 21:10:44

标签: maven maven-3 maven-plugin

我正在构建我的第一个maven插件并且正在针对maven 3.我试图了解实例化策略如何影响线程安全性。如果我保留默认的“per-lookup”策略,那意味着什么?对我而言,这意味着插件的每次执行都会实例化一个新的mojo,因此几乎不可能编写非线程安全的插件。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

因此,使用per-lookup并且不使用静态变量,您就是安全的。