首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程安全框架

线程安全框架
EN

Stack Overflow用户
提问于 2010-03-11 15:30:12
回答 3查看 1.5K关注 0票数 4

下面的类不是线程安全的(正如在Proving the following code not thread safe中证明的那样)

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

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

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

代码语言:javascript
复制
public class LazyInitRace {
   private ExpensiveObject instance = null;

    public ExpensiveObject getInstance() {
    if (instance == null)
      instance = new ExpensiveObject();
    return instance;
   }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-11 15:45:09

FindBugs可以找到线程同步不一致的代码部分,即在一个地方同步对字段的访问,而不是在另一个地方。它还可以对JCIP annotations进行基本的验证,但我相信目前只检查了@Immutable。

我不知道有什么静态分析工具可以自动捕捉这种特殊情况,但我确信有一个。

票数 4
EN

Stack Overflow用户

发布于 2010-03-11 15:33:03

这是一个经典的问题,称为double checked locking problem

问题是你有一个race condition,因为你要检查instance是否为null并赋值。我喜欢用Java解决这个问题的一种方法是:

代码语言:javascript
复制
public class LazyInitRace {
  private static class Container {
    public final static ExpensiveObject INSTANCE = new ExpensiveObject();
  }

  public ExpensiveObject getInstance() {
    return Container.INSTANCE;
  }
}

其工作方式是内部类在被引用之前不会被初始化(这会导致延迟加载),并且加载类是一个原子和threadsafe操作。

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

票数 0
EN

Stack Overflow用户

发布于 2014-01-08 01:49:02

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

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

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

用于编译时的

,理想情况下,在Eclipse中会出现wiggly下划线,并告诉我们该类不是线程安全的?

http://www.checkthread.org/index.html,这是一个开源项目,您可能想要查看示例here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2423266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档