线程安全框架

以下类不是线程安全的( certificate以下代码不是线程安全的certificate )

是否有一个框架可以帮助编译时/运行时分析并告诉我们以下是不是线程安全的?

对于编译时间,理想情况下在Eclipse中出现了摇摆下划线并告诉我们该类不是线程安全的?

对于运行时,任何静态代码分析是否会将该类捕获为非线程安全的?

public class LazyInitRace { private ExpensiveObject instance = null; public ExpensiveObject getInstance() { if (instance == null) instance = new ExpensiveObject(); return instance; } } 

FindBugs可以找到线程同步不一致的代码部分,即您在一个位置同步对一个字段的访问,而在另一个位置不同步。 它也可以对JCIP注释进行基本validation,但我相信目前仅检查@Immutable。

我不知道任何静态分析工具会自动捕获这个特定情况,但我确信存在一个。

这是一个经典的问题,称为双重检查锁定问题 。

问题是你有一个竞争条件,因为你检查instance是否为null并分配值。 我喜欢Java的这个问题的一个解决方案是:

 public class LazyInitRace { private static class Container { public final static ExpensiveObject INSTANCE = new ExpensiveObject(); } public ExpensiveObject getInstance() { return Container.INSTANCE; } } 

它的工作方式是内部类在被引用之前不会被初始化(这会让你得到你的延迟加载)并且加载类是一个primefaces和线程安全的操作。

然而,有其他有效的解决方案。

虽然这个问题被提出或回答已经有很长时间,但今天我在google上搜索时遇到了这个问题。

是否有一个框架可以帮助编译时/运行时分析并告诉我们以下是不是线程安全的?

http://www.contemplateltd.com,他们开发了一种先进的静态分析工具。 但它不是免费的。

对于编译时间,理想情况下在Eclipse中出现了摇摆下划线并告诉我们该类不是线程安全的?

http://www.checkthread.org/index.html ,这是一个开源项目,你可能想在这里看到例子