线程安全框架
以下类不是线程安全的( 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 ,这是一个开源项目,你可能想在这里看到例子